use*_*077 1 javascript node.js promise ecmascript-6
我的印象是,一系列 Promise 返回“then”链中的最后一个 Promise。然而,当我测试以下内容时,情况似乎并非如此:
function a() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
console.log('1');
resolve(1);
}, 1000);
}).then((num) => {
setTimeout(function() {
console.log('2');
return 2;
}, 1000);
});
}
a().then((num) => {
console.log('a is done running');
console.log('finally, ', num);
});
Run Code Online (Sandbox Code Playgroud)
目前代码输出
1
a is done running
finally, undefined
2
Run Code Online (Sandbox Code Playgroud)
最底层的履行函数不应该仅在链中的所有 Promise 完成时才运行吗?
我怎样才能让它输出以下内容?
1
2
a is done running
finally, 2
Run Code Online (Sandbox Code Playgroud)
您可以通过实际返回一个新的承诺来做到这一点:
function a() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
console.log('1');
resolve(1);
}, 1000);
}).then((num) => {
return new Promise((resolve) => {
setTimeout(function() {
console.log('2');
return resolve(2);
}, 1000);
})
});
}
// the "then" here actually comes from the second promise.
a().then((num) => {
console.log('a is done running');
console.log('finally, ', num);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2646 次 |
| 最近记录: |