当我们设计一个返回 promise 的函数时,像这样:
function getAsyncResult() {
// synchronous code 1
return new Promise(function (resolve, reject) {
// synchronous code 2
// asynchronous code
});
}
在创建结果 promise 之前或在回调开始时放置同步代码是否有区别?
换句话说,new Promise(...)
和调用其回调函数之间是否可能存在延迟?
换句话说,同步代码 2
是否有可能延迟执行,而不是在 同步代码 1
之后立即执行?
附言我对 ES6 Promise 和 Bluebird 最感兴趣,不过我很想知道其他主要库是否有不同的做法。
最佳答案
根据ES6 spec ,它所谓的“执行者”(传递给构造函数的回调)立即执行。因此,不以这种方式运行的实现将不符合规范,您可以依赖它。
因此,您可以在调用构造函数之前或在执行程序中放置您的代码,并且它在执行时间方面应该没有任何区别(尽管正如另一个答案所指出的那样,在发生的事情方面会有差异如果代码抛出)。
其他实现可能会有所不同,有些甚至可能不提供 ES6 风格的 promise 构造函数,而是选择以其他方式构建 promise。
关于javascript - promise 回调可以延迟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37359191/