gpt4 book ai didi

javascript - 取消 promise 链?

转载 作者:数据小太阳 更新时间:2023-10-29 05:18:38 28 4
gpt4 key购买 nike

我链接了一系列的 promise :

this.getData.then(this.getMoreData).then(this.getEvenMoreData);

在某些时候,用户可能会决定取消请求并请求其他内容。

如何取消链的传播?

最佳答案

您必须检查每个链接方法内的状态(是否应取消):

var userRequestedCancel = false;

this
.getData()
.then(function() {
if(userRequestedCancel) {
return Promise.reject('user cancelled');
}

return getMoreData();
})
.then(function() {
if(userRequestedCancel) {
return Promise.reject('user cancelled');
}

return getEvenMoreData();
})

或者也许是一种稍微更优雅的方式(编辑以将上下文和参数传递给 callback 方法)

var currentReq = false;
var userRequestedCancel = false;
var shouldContinue = function(cb,args) {
if(userRequestedCancel) {
return Promise.reject('user cancelled');
}

currentReq = cb.apply(this,args);
return currentReq;
}

var onCancel = function() {
userRequestedCancel = true;
currentReq && currentReq.abort();
}

this
.getData()
.then(function() {
return shouldContinue(getMoreData,arguments);
})
.then(function() {
return shouldContinue(getEvenMoreData,arguments);
})

如果您还需要取消当前请求,这有点微不足道,请将您当前的 ajax 请求设置为全局变量,无论什么事件都会设置 userRequestedCancel 标记为 true,同时取消 ajax 请求(参见上面编辑的代码)

关于javascript - 取消 promise 链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987953/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com