我不確定我期望的內容是否正確,但如果Promise
與其他任何JavaScript類相似,則它應該有this
上下文。Promise中的此上下文並不涉及內部實例
但下面的代碼讓我感到驚訝。
var promise = new Promise(function (resolve, reject) {
console.log(this === window); // Prints true
});
我在這裏錯過了原生Promise的概念嗎?
我的目標是在創建它時將某些屬性附加到承諾對象,並能夠稍後訪問它。
我知道在Promise
中傳遞的回調函數不在任何上下文中,並且會像調用普通函數一樣調用。但是,有沒有辦法將財產附加到每個返回的承諾?
this.someProp = someobj.returnVal();
更多信息
基本上,我作出的承諾中一個Ajax請求,我想請求對象存儲在承諾讓我能請求時,我用它來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
@ jfriend00 _jqXHR_ - 是不是假設jQuery? 'fetch' https://developer.mozilla.org/en/docs/Web/API/Fetch_API可能是答案(IE有一個polyfill) –
是的,我的錯誤。我認爲這是jQuery。請顯示您的實際代碼。也許你需要返回一個既有承諾又有XHR對象的對象,而不僅僅是一個承諾。 – jfriend00