当有若干个promise, p1, p2, p3…在调用let p = Promise.race([p1, p2, p3,…])的时候,返回的p也是一个promise。那么p什么时候会被resolve或者被reject呢?看race我们知道它是竞速的意思,所以p1, p2, p3 … 最先一个被resolve或者被reject的结果就是p的resolve或者reject的结果。所以后续的promise的resolve和reject都不会再被执行了。
只要不调用race返回结果中的resolve和reject,那么返回结果中的promise就是传入的promise。而当我们调用了返回结果中的resolve或者reject,那么传入的promise在也不会生效了,由此达到来取消它的目的。
let cancelReason = "resolve-or-reject";
let promise = $http.get(url);
let obj = race(promise);
let resolve = function(resolveValue){
if(resolveValue === cancelReason){
return;
}
// resolve code
};
let reject = function(rejectValue){
if(rejectValue === cancelReason){
return;
}
// reject code;
};
function race(p){
let obj = {};
let p1 = new Promise(function(resolve, reject){
obj.resolve = resolve;
obj.reject = reject;
});
obj.promise = Promise.race([p, p1]);
return obj;
}
obj.promise.then(resolve, reject);
// 离开页面或者其他时候,想去干掉上面promise变量中的请求
function leavePage(){
obj.resolve(cancelReason); // or obj.reject(cancelReason)
}
网友评论