簡體   English   中英

調用something.then(Promise.reject)結果錯誤,為什么短手不工作

[英]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()的存根函數)。

其他相關答案:

為什么會拋出一個未定義的異常?

當你傳遞'this'作為參數時

調用時,分配給變量或函數參數的對象方法會失敗

在Javascript中為變量分配方法

未捕獲的TypeError:this.method不是函數 - 節點js類導出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM