Con*_*cer 22 javascript promise
假设我有这样一个Promise:
var promise = new Promise(function(resolve, reject) {
// Do some async thing
});
promise.then(function(response) {
// Then do some other stuff
});
Run Code Online (Sandbox Code Playgroud)
如果async Promise在我打电话之前完成.then()会怎么样?通常情况下,我只会在Promise函数中执行长时间运行的任务,但如果它一次完成很快就会怎么样?
dfs*_*fsq 26
正如所料:如果在promise已经解决之后调用,那么在这种情况下将立即调用回调.
它很容易测试:
var promise = new Promise(function(resolve, reject) {
resolve(123);
});
setTimeout(function() {
promise.then(function(response) {
alert(response);
});
}, 1000)Run Code Online (Sandbox Code Playgroud)
pde*_*nes 13
正如其他人已经指出的那样,您可以.then在解析promise之前或之后添加回调,甚至可以添加多个回调.
这些回调将按照它们被添加的顺序调用,但在事件循环的当前转向之后总是异步调用.因此,如果在添加a时已经解决了promise .then,则会立即调用您的处理程序,但处于"ascynchronous意义".
该承诺/ A +规格的说:
[...]
onFulfilled并onRejected在then调用事件循环之后异步执行,并使用新堆栈.
一个promise具有状态,这意味着即使在实现promise后,您也可以使用.then它附加回调,然后将调用它们,其结果与附加promise后的promise相同。
兑现是成功承诺的最终状态。这意味着您可以在将来将更多的处理程序附加到已实现的诺言上,并使用诺言作为原始响应的缓存。
然后()
兑现或拒绝此诺言后,立即调用提供的功能之一。返回一个新的promise,其状态根据此promise和提供的回调函数而变化。
即使此承诺已经实现或被拒绝,总是在此方法返回后调用适当的回调。您还可以在相同的Promise上多次调用then方法,并且回调将按照注册时的相同顺序被调用。
| 归档时间: |
|
| 查看次数: |
4836 次 |
| 最近记录: |