相关疑难解决方法(0)

ES6承诺返回值的执行顺序

为了理解ES6 promise的执行顺序,我注意到链接处理程序的执行顺序受前一个处理程序是返回值还是promise的影响.

let a = Promise.resolve();
a.then(v => Promise.resolve("A")).then(v => console.log(v));
a.then(v => "B").then(v => console.log(v));
Run Code Online (Sandbox Code Playgroud)

直接在Chrome(v 61)控制台中运行时的输出:

B
A.

但是,当点击Run code snippet按钮时,我会收到订单A B.

是否在ES6中为上述示例定义了执行顺序,还是由实现决定?

如果定义了,那么正确的输出应该是什么?

javascript ecmascript-6 es6-promise

9
推荐指数
1
解决办法
471
查看次数

这个Promise链是否保证按此顺序执行?

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

let p = sleep(50);

p.then(() => console.log('a')).then(() => console.log('c'));
p.then(() => console.log('b')).then(() => console.log('d'));
Run Code Online (Sandbox Code Playgroud)

这是否保证按顺序打印"a,b,c,d"?

据我所知,"a"必须在"c"之前触发,"b"必须在"d"之前触发,但除此之外,JS解释器是否可以决定以不同的顺序执行余数?

javascript promise

6
推荐指数
1
解决办法
156
查看次数

在承诺中,回调订单是否得到保证?

我想确认当then同一个promise上有多个回调时,是否保证传递给的回调的调用顺序.

这是我观察到的.例:

function wait(delayMs) {
    return new Promise(resolve => setTimeout(resolve, delayMs))
}

let prom = wait(500)

for (let i = 0; i < 20; ++i)
    prom.then(() => { console.log(i) }) // OK: Display 0 to 19 in the right order
Run Code Online (Sandbox Code Playgroud)

我观察到回调顺序是受到尊重的,但我没有找到关于这个主题的任何文档.回调订单是否有保证?

编辑:这不是一个如何链接承诺的问题.在这里,我只有一个承诺有几个回调.回调then以确定的顺序传递.我想知道是否也确定了回调执行的顺序.

javascript specifications promise ecmascript-6

2
推荐指数
1
解决办法
131
查看次数