nodeJS中的承诺/承诺中的回调/执行顺序是不对的

Promises in nodeJS / a callback within a promise / order of executions is not right

本文关键字:承诺 不对的 顺序 执行 nodeJS 回调      更新时间:2023-09-26

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

我有这个代码:

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 }