nodeJS中的承诺/承诺中的回调/执行顺序是不对的
Promises in nodeJS / a callback within a promise / order of executions is not right
当我链接多个承诺时,我希望每个承诺只会在前一个承诺结束后执行。不知何故,它没有发生。我确信使用承诺是错误的,并希望得到一些解释。
我有这个代码:
var Promise = require('bluebird');
func('A')
.then(() => {func('B')})
.then(() => {func('C')})
.then(() => {func('D')})
function func(arg) {
return new Promise(function(resolve){
console.log('>> ' + arg);
setTimeout(function(){
console.log(' << ' + arg);
resolve();
}, 200)
})
}
我期待得到这个输出:
>> A
<< A
>> B
<< B
>> C
<< C
>> D
<< D
但相反,我得到这个输出:
>> A
<< A
>> B
>> C
>> D
<< B
<< C
<< D
我做错了什么?
你需要返回承诺
func('A')
.then(() => {return func('B')})
.then(() => {return func('C')})
.then(() => {return func('D')})
或
func('A')
.then(() => func('B'))
.then(() => func('C'))
.then(() => func('D'))
忽略词汇this
或词汇arguments
部分,
() => {1}
翻译成
function() { 1 } // return undefined
() => 1
转换为
function() { return 1 }
相关文章:
- 打破承诺链的好方法是什么
- $q.reject和处理AngularJS链接承诺中的错误
- 将同步函数包装到承诺中的最佳方法是什么?
- 承诺中的成功回调不会发生$http
- 使用 Promise 在另一个函数中调用带有 Bluebird 承诺库的函数
- 对承诺对象的混淆
- 停止蓝鸟承诺中的错误传播
- stdout/stderror 不是 ssh-promise 库中承诺履行的一部分吗?
- CSS matrix3d计算是不对的,但为什么
- 链承诺.all 与从上一个承诺返回的数组.all.
- nodeJS中的承诺/承诺中的回调/执行顺序是不对的
- IE11承诺奇怪的行为
- Q 承诺中的错误处理
- 动态定义蓝鸟承诺中的函数
- 有没有一种 AngularJS 方法来使用带有承诺返回的浏览器模式
- 我是否可以假设承诺中的错误会冒泡到新的承诺并抓住它
- 为什么承诺中的“失败”不会发现错误
- 如何使用Jasmine测试AngularJS承诺返回的内容
- 在循环时解析承诺中的值
- JQuery承诺面临的问题