例如:
let interface = new MyMath().add().sub();
如果不用 promise 的情况下,怎么让 MyMath 构造函数执行完后再执行 add,最后执行 sub 方法?
可能表达的不太清楚,可能是我方向不对,本意是我写个库同事使用,我在百度查询过要实现上面的顺序执行,都是说要用 Promise,我们都是非计算机专业人员,所以不想让同事们去学习 promise 这些以降低难度。
请大家轻点一下
1
dangyuluo 2020-03-14 23:23:27 +08:00
括号?
|
2
lxk11153 2020-03-14 23:29:38 +08:00 1
看你各函数内怎么写的吧?
let interface = new MyMath().add().sub(); MyMath: function(){console.log(1);return this;} add: function(){console.log(2);return this;} sub: function(){console.log(3);return this;} 这样不是顺序执行的吗? |
3
ayase252 2020-03-14 23:34:36 +08:00
是异步的吗?不是异步的为什么会查出来 promise?
|
4
wly19960911 2020-03-14 23:43:45 +08:00
链式调用按顺序? 你这必须写队列运行啊...实际上又实现了 promise。很无趣的,建议学习 promise 然后转 async function 会很愉快的
|
5
dremy 2020-03-15 00:37:36 +08:00 via iPhone 1
只要不需要用到异步,写同步代码就是顺序执行的,没这么乱七八糟
|
6
azcvcza 2020-03-15 00:51:33 +08:00
d3 库的正常操作,返回一个 this 就可以无限往下写
|
7
randyo 2020-03-15 00:58:09 +08:00 via Android
function MyMath(){}
MyMath.porototype.add=function (){return this} MyMath.porototype.sub=function (){return this} |
8
keroppi OP |
10
longjiahui 2020-03-15 04:12:03 +08:00
构造函数内的异步没办法返回 promise 吧,那就用不了 async/await。
那只能构造的时候传一个回调函数作为参数 ```js let myMath = new MyMath(()=>{ myMath.add().sub(); }); ``` |
11
Justin13 2020-03-15 08:38:46 +08:00 via Android
同步代码就是顺序执行的,如果其中夹杂异步操作,还想写链式,上 Promise 吧。
|
12
luvroot 2020-03-15 10:50:11 +08:00
return 自己的指针,类似
func (me *op) add () *op { //do add return me } |
13
zzzzzzggggggg 2020-03-15 17:27:29 +08:00
你混淆了链式调用和顺序执行
你在百度上查的应该是如果在有异步操作(例如 ajax 网络请求)的情况下依然使代码保持顺序执行,这种情况下需要使用 promise 或者 async await 等等方法 但是你给出的这个例子 let interface = new MyMath().add().sub(),不涉及异步操作的话,就在方法中 return this 保持一个上下文就可以实现链式调用 class MyMath { constructor() { // do something } add() { // do something return this; } sub() { // don something return this; } } 希望对你有帮助 |
14
zzzzzzggggggg 2020-03-15 17:30:07 +08:00
@keroppi 才看到你说了:“MyMath 构造方法内有大量查询,还没执行完,就开始执行 add()方法了”
这应该就是涉及到了异步的操作,需要学习 JavaScript 里的 promise 或者 async、await 来解决 |
15
secondwtq 2020-03-15 18:30:20 +08:00
楼主的需求是可以实现的,比如可以引入某种形式的回调
当然回调写多了就会考虑如何简化抽象 然后就会重新发明 Promise “专业”的东西的存在是有其道理的,难度最低的路恰恰就是“专业”的路。忽视“专业”的成果自作聪明班门弄斧往往适得其反 当然楼主的需求可能走不到“回调写多了”那一步,那直接回调可能更直接一点 |