gpt4 book ai didi

javascript - 在 ECMAScript 6 中创建可取消的 promise

转载 作者:行者123 更新时间:2023-11-29 18:03:57 25 4
gpt4 key购买 nike

我正在使用 native Promise 像这样通过 superagent 发出 ajax 请求。

function callAPI() {
return new Promise(function () {
request.get('/some.json')
.end(function (error, res) {
resolve(res);
});
});
}

var reqProm = callAPI();

我想知道的是,我可以使用这个 promise 来取消/中止发出的请求吗?我认为 Promise.prototype 中应该有一个方法,如下所示。

function callAPI() {
new Promise(function (resolve, reject) {
this.req = request.get('/some.json')
.end(function (error, res) {
resolve(res);
});
});
}

Promise.prototype.abort = function () {
this.req.abort();
}

但是,我收到一条错误消息,指出 Promise.prototype 是只读的。有没有更好的方法来做到这一点?

最佳答案

I'm getting an error saying Promise.prototype is readonly

我认为这不是真的。您收到的错误是什么?

What I am wondering is, can I use this promise to cancel/abort the request made?

不是返回您创建的新Promise,而是将其存储在closure 中。并返回带有额外方法的 Promise 实例,该方法具有调用 req 上的 abort 方法以及 Promise 的 reject 方法的范围。

作为旁注,在您的第一个示例中,您试图在 new Promise 中调用 resolve 但没有通过接受 resolve< 使其可用reject 函数作为 Promise 构造函数执行器的参数。

function callAPI() {
let _reject;
let _req;

let promise = new Promise(function (resolve, reject) {
_reject = reject;
_req = request.get('/some.json').end(function (error, res) {
resolve(res);
});
});

promise.abort = function () {
_req.abort();
_reject();
};

return promise;
}

let call = callAPI();

call.abort();

关于javascript - 在 ECMAScript 6 中创建可取消的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32779020/

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