美文网首页
es6取消一个promise(一个网络请求等同样的问题)

es6取消一个promise(一个网络请求等同样的问题)

作者: 初心不改_0055 | 来源:发表于2018-12-18 09:16 被阅读0次

当有若干个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)
}

相关文章

网友评论

      本文标题:es6取消一个promise(一个网络请求等同样的问题)

      本文链接:https://www.haomeiwen.com/subject/woighqtx.html