Javascript AngularJS:$q.race()在旧的angular版本中
Angular 1.5.8实现了一个Javascript AngularJS:$q.race()在旧的angular版本中,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,Angular 1.5.8实现了一个$q.race()方法,该方法接受承诺数组并返回一个承诺,该承诺与第一个已解析承诺的值进行解析 不过,我现在仍坚持使用angular 1.4,需要一些功能,如$q.any或$q.race方法 目前,我使用.then()中的标志来“记住”承诺的状态,这显然是不理想的 var resolvedPromise = null; promise1.then(function(data){ if(!resolvedPromise === 'promise2'){
$q.race()
方法,该方法接受承诺数组并返回一个承诺,该承诺与第一个已解析承诺的值进行解析
不过,我现在仍坚持使用angular 1.4,需要一些功能,如$q.any
或$q.race
方法
目前,我使用.then()
中的标志来“记住”承诺的状态,这显然是不理想的
var resolvedPromise = null;
promise1.then(function(data){
if(!resolvedPromise === 'promise2'){
resolvedPromise = 'promise1';
successcallback(data)
}
})
promise2.then(function(data){
if(!resolvedPromise === 'promise1'){
resolvedPromise = 'promise2';
successcallback(data)
}
})
问题
我一次只需要这两个承诺:
myRaceFkt(p1,p2)
.then(successcallback)
有没有一个更优雅的解决方案,而不必访问改进的
$q
-api 1.5.8?您到底想做什么?开源的好处之一-您可以自己看看它们的实现:给出两个承诺q1
和q2
,当其中一个承诺解决时,我想立即调用一个函数。functioncall的参数必须是用于解析承诺的数据。@JoeClay谢谢!我试图通过使用$provide.decorator('$q',function($delegate){$delegate.race=…}
将此添加到我的$q
-服务中,但由于$delegate似乎不是我可以扩展的对象,所以被卡住了。有人能给我一个语法提示吗?为什么要使用.bind(defer)
?我在没有调用bind的情况下尝试了这个方法,当您使用object方法时,它似乎按照预期工作,您永远不知道它是否具有此引用。因此,在不阅读源代码的情况下使用bind和safe是安全的
function myRaceFn(promises){
return $q(function(resolve, reject) {
promises.forEach(function(promise) {
promise.then(resolve, reject);
});
});
}
myRaceFn([promise1, promise2]).then(....