[英]Different function call types with Promises
它們在方面有何不同
等等
getFromURL().then(function () {
return callbackFunc();
});
getFromURL().then(function () {
callbackFunc();
});
getFromURL().then(callbackFunc());
getFromURL().then(callbackFunc);
他們返回相同的結果
這是不正確的。 他們並不是都在做同樣的事情。
您的選項#1 和#4 是合理的做事方式。 您的選項 #2 可能是錯誤的,特別是如果callbackFunc()
是異步的。 您的選項 #3 總是錯誤的,除非callbackFunc()
返回一個您希望在 promise 鏈中調用的 function 並且您希望在getFromURL()
解析之前調用它(這兩種情況都很少見)。
要查看所有這些之間的區別,您需要callbackFunc()
的返回值,並且需要第二個.then()
以便您可以看到該返回值。
因此,假設callbackFunc()
返回“hello”。 然后,這就是你得到的。 這兩個是相同的:
getFromURL().then(function () {
return callbackFunc();
}).then(result => {
console.log(result);
});
getFromURL().then(callbackFunc).then(result => {
console.log(result);
});
這兩個都將記錄調用callbackFunc()
的返回值或由callbackFunc()
返回的 promise 的解析值(無論它返回),或者如果callbackFunc()
返回一個被拒絕的 promise,那么 ZB321DE3BDC279EC807E9F7D 鏈將接受該拒絕。 這兩種方案是執行 promise 鏈的常規方法,其中在getFromURL()
解析后, callbackFunc()
被排序到 promise 鏈中。
這個總是記錄undefined
:
getFromURL().then(function () {
callbackFunc();
}).then(result => {
console.log(result);
});
因為第一個.then()
處理程序沒有返回值。 callbackFunc()
的調用順序與前兩個相同,但由於您沒有從.then()
處理程序返回它的返回值,因此它是孤立的並與 promise 鏈分離,並且 promise 鏈具有undefined
的解析值.
如果callbackFunc()
是異步的,那么這可能是錯誤的,因為callbackFunc()
不是 promise 鏈的一部分,並且由於您沒有從 .then .then()
處理程序返回它的 promise,因此無法跟蹤其成功或失敗。 這成為一個“一勞永逸”的獨立 promise 鏈。 如果它拒絕,您將收到系統錯誤,因為未捕獲的拒絕。
如果callbackFunc()
是同步的並且您不關心它的返回值,那么這只是在getFromURL()
像前兩個選項一樣解析之后對callbackFunc()
進行排序,只是您忽略了返回值。
這一個與其他的最不同:
getFromURL().then(callbackFunc()).then(result => {
console.log(result);
});
它將在getFromURL()
解析之前調用callbackFunc()
。 它的返回值將傳遞給.then()
。 除非該返回值是 function 引用,否則 promise 鏈將完全忽略它。
getFromURL().then(function () {
return callbackFunc();
});
此語句返回一個 Promise,它將使用callbackFunc()
返回的值進行解析(如果callbackFunc
返回一個 Promise,則遵循任何 Promise 鏈)。 這是一種常見的模式。
getFromURL().then(function () {
callbackFunc();
});
此語句返回一個 Promise,它以 undefined 解析。 如果callbackFunc()
是異步的,則外部 Promise 在callbackFunc()
完成之前解析。 通常這可能是不可取的。
getFromURL().then(callbackFunc());
該語句立即調用callbackFunc()
,然后將它返回的任何內容傳遞給.then()
。 結果未定義。 沒有看到callbackFunc
就不知道它做了什么。 可能會導致錯誤。
getFromURL().then(callbackFunc);
該語句返回一個 Promise ,它將使用callbackFunc()
返回的值進行解析。 它與第一個基本相同,完全可以接受。
通常,#1 和#4 是您想要使用的。 #2 和 #3 要么草率要么錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.