看一下使用Promises的示例JavaScript代码:
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
有人可以解释为什么会这样吗?由于我首先要创建承诺,然后调用reject
,不应该先打印something
吗?承诺是否在一个单独的线程上运行,以至于无法保证操作顺序?
答案 0 :(得分:1)
Promise始终是异步(即使立即解析),因此将始终在同步代码后解析。
答案 1 :(得分:0)
Promises
的规范要求即使他们没有做任何异步,他们也应该以异步方式表现一致性。所以这里,promise的then / catch方法将在下一个事件循环检查时调用,这将在调用堆栈变空时发生,只有在执行最后一个console.log()语句后才会变为空。因此结果。