[英]Calling something.then(Promise.reject) result error, Why short hand not working
請看這個最低限度的例子:
我有這樣的數據:
const testObject = { test: 'foo' };
我的主要功能是:
導致錯誤
// This cause error
function handleResponse(response) {
return response.json().then(Promise.reject); // Please notice this line
}
try {
await handleResponse({
json: () => Promise.resolve(testObject),
});
} catch (err) {
console.log(err);
// => TypeError: PromiseReject called on non-object
}
這一個有效:
正確
// This works
function handleResponse(response) {
return response.json().then((res) => Promise.reject(res)); // Please notice this line
}
try {
await handleResponse({
json: () => Promise.resolve(testObject),
});
} catch (err) {
console.log(err);
// => {test: "foo"}
}
為什么會這樣? 我錯過了什么?
something.then(Promise.reject)
獲取對reject方法的引用,並僅傳遞該函數引用。 它不再與Promise
對象有任何連接。 這意味着調用reject()
方法時的this
值將不正確,並且不允許這樣做。
帕特里克在評論中提到,這是你不能這樣做的原因:
let reject = Promise.reject;
reject("whatever");
需要使用對象的上下文調用方法,除非它們專門設計為不需要對象的上下文(有一些實例)。
如果你想要一個快捷方式,你可以這樣做:
something.then(Promise.reject.bind(Promise))
這將Promise
對象綁定到方法(通過創建一個將其稱為Promise.reject()
的存根函數)。
其他相關答案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.