【发布时间】:2015-12-25 06:25:23
【问题描述】:
我不确定我的期望是否正确,但如果 Promise 与任何其他 JavaScript 类一样,它应该有一个 this 上下文。
但是下面的代码让我吃惊。
var promise = new Promise(function (resolve, reject) {
console.log(this === window); // Prints true
});
我在这里错过了原生 Promise 的概念吗?
我的目标是在创建 Promise 对象时为其附加一些属性,以便以后能够访问它。
我知道Promise 中传递的回调函数不在任何上下文中,并且会像普通函数一样被调用。但是有没有办法将属性附加到每个返回的承诺?
this.someProp = someobj.returnVal();
更多信息
基本上,我在 Promise 中发出 ajax 请求,我想将请求对象存储在 Promise 中,以便我可以在需要时将其用于abort 请求。通过将 polyfill abort 添加到 Promise.prototype
这是实际代码。
var _request;
const promise = new Promise(function (resolve, reject) {
this._request = superagent.get(url)
.end((error, res) => { resolve(res); }); // What I expect to work
_request = superagent.get(url)
.end((error, res) => { resolve(res); }); // But I have no this context
});
Promise.prototype.abort = function () {
this._request.abort(); // Can't do this
}
【问题讨论】:
-
你能描述一下是什么问题让你想在承诺中附加一些东西,因为可能有更好的方法来解决你的问题。
-
@jfriend00 jqXHR - 这不是假设 jquery 吗?
fetchdeveloper.mozilla.org/en/docs/Web/API/Fetch_API 可能是答案(IE 有一个 polyfill) -
是的,我的错。我以为是jQuery。请显示您的实际代码。也许您需要返回一个同时包含 Promise 和 XHR 对象的对象,而不仅仅是一个 Promise。
-
请贴出代码。如果我们可以看到您尝试使用的实际代码,而不是尝试回答通常与您尝试遵循的解决方案有关的抽象问题,而不是对实际整体问题的描述,那么您总是会得到更高质量的答案。
-
@JaromandaX -
fetch()是否返回带有 abort 方法的承诺? OP 希望能够对 ajax 调用使用 Promise,但也能够调用abort()。
标签: javascript promise es6-promise