javascript - nodeJS 中的 promise / promise /执行顺序中的回调不正确

标签 javascript node.js callback bluebird

当我链接多个 promise 时,我希望每个 promise 仅在前一个 promise 结束后执行。不知何故它不会发生。我确信使用 promises 是错误的,希望得到一些解释。

我有这个代码:

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

我哪里错了?

最佳答案

你需要返回 promise

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 }

关于javascript - nodeJS 中的 promise / promise /执行顺序中的回调不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35709812/

相关文章:

javascript - 是否可以将回调内的数据传递给其包装的函数?

Javascript - 检索操作系统日期格式

javascript 文本追加

javascript - 将共享的 'code_block' 从 loc-A 移动到 loc-B,只有一个 'code_block' 的写入实例

node.js - 从 DynamoDB 检索值

node.js - Sequelize 预加载错误

C# 整数作为回调中的引用传递?

javascript - jQuery 动画回调未按顺序触发

javascript - 为什么这种行为?__proto__ vs 原型(prototype)?

javascript - React js - 表达: res.发送与res.render错误