【发布时间】:2016-05-31 21:53:51
【问题描述】:
我正在使用 Typescript 编写 JS 承诺。我有一个复合承诺,即返回承诺的承诺 我有:
test() {
addElement("first")
.then(
function (val){
addElement("second");
console.log("second*);
})
.then(
function (val){
addElement("third");
console.log("third*");
});
}
export function addElement(elementText){
return new Promise(function(resolve,reject){
setTimeout(function(){
resolve();
}, Math.random() * 2000);
})
.then(console.log(elementText));
}
我希望将这些函数打印出来,first, second*, second, third*, third。但是,我得到:
JS:首先 JS:第二个* JS:第三个* JS:第三 JS:第二个
在被调用的 Promise 的 then 完成后,如何让 then 执行?
【问题讨论】:
-
Promise 会在事件循环的下一次迭代中得到解决,按照设计。
-
@zerkms 有没有办法只在执行完所有 addElement 逻辑后才执行某些代码?像 onCompletion 事件?
-
你可以使用 Promise.all() 来计算执行顺序。
-
首先,将
.then(console.log(elementText));更改为.then(function() {console.log(elementText)}),这样它不会立即调用,而是在promise 解决时调用。您需要将函数引用传递给.then()。您正在立即执行该函数,然后传递该函数的返回结果undefined。
标签: javascript typescript promise