我正在使用Typescript来编写JS promises。我有一个复合的承诺,即承诺,它会返回一个承诺 我有:
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:第二次
如何在被叫承诺'then
完成后让then
执行?
答案 0 :(得分:0)
您不是在then
区块中返回您的承诺。如果您没有返回承诺,那么then
块将立即return undefined
,并且没有任何东西会等待它。如果您返回一个承诺,那么承诺链的执行将暂停,直到您返回的承诺得到满足为止。
test() {
addElement("first")
.then(
function (val){
console.log("second*");
return addElement("second");
})
.then(
function (val){
console.log("third*");
return addElement("third");
});
}
虽然我个人认为这不是一个“菜鸟错误”,但你的描述与Nolan Lawson的“We have a problem with promises”中的“新秀错误#5”相符;继续阅读以获得更深入的解释。