我认为这是一个基本的错误,但由于我的搜索没有效果,我们还是在这里做吧:)
我有一个函数返回一个承诺,但是它运行得太快了(因为代码几乎是空的),所以当调用.then()时,已经太晚了,没有调用任何事件。
之所以会发生这种情况,是因为这是一个虚拟代码(用于测试),因此,应用允诺概念是因为实际的异步请求已经完成。
那么,即使在函数被处理之后,是否也有一种方法来调用解析/拒绝函数呢?否则我将不得不使用懒散的承诺
更新:我尝试了RSVP.defer(),但不喜欢它的方法,因为它不够直观(需要一些变通方法来设置.then()和.catch()等等)。
发布于 2015-09-18 15:10:06
我有一个函数返回了一个承诺,但是它运行得太快了(因为代码几乎是空的),所以当调用.then()时,已经太晚了,也没有调用任何事件。
一点也不重要。行为良好的承诺(就像本机承诺,以及除旧jQuery之外的几乎所有库)都是在保证无论何时附加then处理程序--它都会调用处理程序(而且它总是异步调用)的情况下构建的。承诺是,只是一个值+时间。
RSVP通过了1000多个测试的套件,以确保总是这样。
var p = Promise.resolve(); // create empty, already resolved promise
setTimeout(function(){
p.then(function(){
// will always be called, eventually.
});
}, 1000000 + Math.random() * 10000000);https://stackoverflow.com/questions/32634390
复制相似问题