假設我將函式實作fA為同步呼叫,而在另一個模塊中,此類功能使用不同的名稱(例如fB)并作為異步呼叫實作。
fA要使用新模塊,如果可能的話,我不想更改每個現有的函式呼叫。所以,
我有什么辦法可以給這樣的異步函式呼叫fB別名fA嗎?類似的東西,例如:
const fA = await fB
uj5u.com熱心網友回復:
不,你不能那樣做。 await僅適用于您的函式回傳的承諾,而不適用于函式本身。
而且,沒有辦法將異步介面轉換為同步介面 - 它無法在 Javascript 中完成。因此,如果您所有使用同步的代碼fA()現在都想使用fB()回傳承諾的異步,那么您將不得不更改您現在呼叫的任何地方fA()以使用fB()回傳 wither with awaitor的承諾.then()。沒辦法。
當然,如果您向我們展示了 forfA()和 for的實際代碼以及fB()正在使用的代碼fA(),我們可能會對如何最好地調整現有的呼叫fA().
現在你的問題是一個理論問題,所以我們只能提供一個理論答案。Stackoverflow 的答案通常對實際代碼更有幫助,因此我們可以提供適合您實際代碼的具體建議。
請注意,您可能很想嘗試fB()像這樣制作一個包裝器:
function fA() {
return await fB();
}
但是,你不能這樣做,因為為了使用await,你必須做到async:
async function fA() {
return await fB();
}
這實際上與以下內容相同:
function fA() {
return fB();
}
這意味著fA()包裝器仍然像fB()did 一樣回傳一個承諾(所有async函式都回傳一個承諾),因此這個包裝器不會為您的呼叫者完成任何事情。
要使用異步函式,呼叫者必須使用函式使用的任何異步呼叫機制(回呼、承諾、事件等)。因此,從直接回傳值的同步函式切換到通過 Promise 將結果傳回的異步函式需要更改呼叫代碼。沒有辦法解決這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/434867.html
標籤:javascript 功能 ecmascript-6 别名
上一篇:使plyr::ddply代碼與dplyr等效的自定義函式兼容
下一篇:將串列元素一一作為函式的引數傳遞
