Promise问题

发布于 7 年前作者 tao4811143 次浏览最后编辑 7 年前来自 ask

在用promise的时个,为什么还是不按顺序执行?

我定义了三个函数读取不同的照片

然后调用

如果按流程来,应该输出结果的顺序是

但有时候还是会出现顺序不同的情况

请问是我写的方式不对,还是什么原因呢?

4 回复
tding
tding1 楼6 年前

推荐我开源的  https://github.com/youngjuning/wxPromise ,支持小程序API promise化、ES7 async await 等函数、ES8 finally 、一揽子正则验证和一些解决方案函数。开发不易,喜欢的话给一个星星  

qiangyao
qiangyao2 楼6 年前

1楼 @赵子龙 的写法是对的。

P.S. 不会简写的时候就不要瞎简写……

dzhao
dzhao3 楼6 年前

首先 then 的参数是一个函数,而你这里写的是 this.downImgPro3(url) 的返回值,所以请求1、 2 和 3 应该是一起发出的(因为给 .then 传参数时会执行一次求值操作)

建议使用 async/await 来写这种顺序执行的异步操作,可以重构为:

await this.downImgPro2(url);

await this.downImgPro3(url);

await this.downImgPro3(url);

参考 MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async\_function

lhe
lhe4 楼5 年前

感觉,你在瞎写

this.downImgPro2().then(()=>this.downImgPro3(url)).then(this.downImgPro);