2 回答

TA貢獻1898條經驗 獲得超8個贊
同步和異步執行
如果函數是同步的,則可以按順序調用它們,因為它們是一個接一個執行的:
getStudentDataFunction() getTeachersDataFunction()
然而,這些函數大概是異步的,否則你就不會問這個問題。這意味著該函數中的一條語句必須啟動獲取數據的過程,但它是通過另一程序路徑獲取的。
異步請求示例
一個例子是XMLHttpRequest
,發出瀏覽器內 HTTP 請求的標準方法(該示例來自Mozilla 文檔):
var?oReq?=?new?XMLHttpRequest(); oReq.addEventListener("load",?reqListener); oReq.open("GET",?"http://www.example.org/example.txt"); oReq.send();
這里oReq.send();
發出HTTP請求,開始請求數據的過程。但實際獲取數據的方式是通過使用reqListener
第二行中的回調函數。當數據準備好時,將使用this
上下文對象單獨調用該函數,該上下文對象允許獲取 HTTP 響應。因此,任何因 HTTP 請求返回而執行的代碼都必須從 調用reqListener
。
適用于您的場景
為了讓您的函數按順序運行,您需要識別回調函數或getStudentDataFunction()
用于獲取其數據的其他機制,然后使用 JavaScript 處理異步代碼的方法之一以您想要的方式對函數進行排序。三種主要方式是回調、Promises和異步函數(從最古老到最現代)。getStudentDataFunction()
本身應該使用這三種方法之一。
這些將按如下方式工作:
// 1. If getStudentDataFunction() accepts a callback
var studentCallback = function(studentData) {
? ?getTeachersDataFunction()
}
getStudentDataFunction(studentCallback)
// 2. If getStudentDataFunction() returns a Promise:
getStudentDataFunction()
? ?.then(getTeachersDataFunction) // second function is only called when Promise resolves
// 3. If getStudentDataFunction() returns a Promise and you wish to use async functions:
async function getAllData() {
? ?await getStudentDataFunction() // await keyword makes execution wait for Promise to resolve
? ?getTeachersDataFunction()
}
getAllData()

TA貢獻2016條經驗 獲得超9個贊
您可能需要使用 Rxjs 使這兩個方法可觀察,因此您可以執行以下操作:
? caller() {
? ? this.method1()
? ? ? .pipe(switchMap(res1 => this.method2(res1)))
? ? ? .subscribe(res2 => {
? ? ? ? console.log(res2);
? ? ? });
? }
添加回答
舉報