了解使用 ES6 Promises 时的操作顺序
Understanding the sequence of operations when using ES6 Promises
看看这个示例 JavaScript 使用 Promises 的代码:
const promiseGen = () => {
return new Promise((resolve, reject) => {
reject('something')
})
}
promiseGen().catch(err => console.log(err))
console.log('after promiseGen')
我原以为输出是:
something
after promiseGen
而是
after promiseGen
something
有人可以解释为什么会这样吗?因为我首先创建了 promise,它又调用了 reject
,难道不应该先打印 something
吗? promise 运行 是否在单独的线程上,以至于无法保证操作顺序?
Promise 始终是异步的(即使您立即解析它),因此总是在同步代码之后解析。
Promises
的规范要求即使他们没有做任何异步操作,他们也应该以异步方式表现以保持统一。所以在这里,promise 的 then/catch 方法将在下一次事件循环检查时被调用,这将在调用堆栈变空时发生,只有在执行最后一个 console.log( ) 陈述。因此结果。
看看这个示例 JavaScript 使用 Promises 的代码:
const promiseGen = () => {
return new Promise((resolve, reject) => {
reject('something')
})
}
promiseGen().catch(err => console.log(err))
console.log('after promiseGen')
我原以为输出是:
something
after promiseGen
而是
after promiseGen
something
有人可以解释为什么会这样吗?因为我首先创建了 promise,它又调用了 reject
,难道不应该先打印 something
吗? promise 运行 是否在单独的线程上,以至于无法保证操作顺序?
Promise 始终是异步的(即使您立即解析它),因此总是在同步代码之后解析。
Promises
的规范要求即使他们没有做任何异步操作,他们也应该以异步方式表现以保持统一。所以在这里,promise 的 then/catch 方法将在下一次事件循环检查时被调用,这将在调用堆栈变空时发生,只有在执行最后一个 console.log( ) 陈述。因此结果。