相关疑难解决方法(0)

在javascript承诺中执行的顺序是什么

我想向自己解释下面使用javascript promises的代码片段的执行顺序.

Promise.resolve('A')
  .then(function(a){console.log(2, a); return 'B';})
  .then(function(a){
     Promise.resolve('C')
       .then(function(a){console.log(7, a);})
       .then(function(a){console.log(8, a);});
     console.log(3, a);
     return a;})
  .then(function(a){
     Promise.resolve('D')
       .then(function(a){console.log(9, a);})
       .then(function(a){console.log(10, a);});
     console.log(4, a);})
  .then(function(a){
     console.log(5, a);});
console.log(1);
setTimeout(function(){console.log(6)},0);
Run Code Online (Sandbox Code Playgroud)

结果是:

1
2 "A"
3 "B"
7 "C"
4 "B"
8 undefined
9 "D"
5 undefined
10 undefined
6
Run Code Online (Sandbox Code Playgroud)

我很好奇执行顺序1 2 3 7 ...而不是值'A','B'......

我的理解是,如果一个promise得到解决,'then'函数将被放入浏览器事件队列中.所以我的期望是1 2 3 4 ......


@ jfriend00谢谢,非常感谢您的详细解释!这真是一项巨大的工作!

javascript promise es6-promise

30
推荐指数
1
解决办法
1万
查看次数

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.resolve() 什么时候触发 then() 方法?

我正在学习 js 中的 Promise,我对此有一些疑问,这是代码:

Promise.resolve().then(() => {
  console.log(0);
  return Promise.resolve(4);
}).then((res) => {
  console.log(res)
})

Promise.resolve().then(() => {
  console.log(1);
}).then(() => {
  console.log(2);
}).then(() => {
  console.log(3);
}).then(() => {
  console.log(5);
}).then(() => {
  console.log(6);
})
Run Code Online (Sandbox Code Playgroud)

输出与我预期的相差甚远,我认为它会是 0 1 4 2 3 5 6,因为我在 MDN 上看到了这个

Promise.resolve() 方法返回一个使用给定值解析的 Promise 对象

那么 log() 方法不应该在数字 1 后面触发吗?

我究竟做错了什么?

javascript es6-promise

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

在Promises中解决Promise的顺序

对于以下代码

function inner () {
  new Promise(function(resolve,reject){
    resolve()
  }).then(function(){
    console.log('Inner Promise')
  })
}
function outer() {
  return new Promise(function(resolve, reject){
    resolve()
    inner()
  })
}

outer().then(function(data) {
  console.log('Outer Promise')
})
Run Code Online (Sandbox Code Playgroud)

输出是

Inner Promise
Outer Promise
Run Code Online (Sandbox Code Playgroud)

我认为外部决心将是第一个进入JS Message Queue,然后是内部解析.然而,JS事件循环首先触发内部解析,然后是外部解析.

Promise在内部解决了什么?

javascript promise

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

标签 统计

javascript ×4

es6-promise ×3

promise ×2

ecmascript-6 ×1