[英]Javascript how to properly await for a function before triggering the next one?
我遇到了 await 和 async 函數的問題,其中應該等待獲取命令完成的函數在完成之前觸發,因此我收到未定義的值錯誤。
這是執行 fetch 的函數:
async function BoardGet() {
let conjunction = "Bearer " + responseToken.response.token
var myHeaders = new Headers()
myHeaders.append("Authorization", conjunction)
myHeaders.append("Content-Type", "application/json")
var raw = JSON.stringify({})
var requestOptions = {
method: 'GET',
headers: myHeaders,
//body: raw,
redirect: 'follow'
}
fetch("https://link-to-my-database", requestOptions)
.then(response => response.text())
.then(function(result) {
let tempAvailableBoards = result
availableBoards = JSON.parse(tempAvailableBoards)
console.log("available boards: ", availableBoards)
})
.catch(error => console.log('error', error))
只獲取一個 JSON 文件,該文件被解析為一個變量。 問題是當我調用使用availableBoards 的第二個函數時,即使我使用了 await,根據我的理解,這應該強制下一個代碼塊等待,但不會
async function BoardCheck() {
await BoardGet()
//check for board before creating a new one, if board already created return
for(i = 0; i < availableBoards.response.data.length; i++) {
if(boardId == availableBoards.response.data[i].fieldData._id_Miro_MiroBOARD) {
console.log("This board is already in the database, now exiting this board create....")
recordId = availableBoards.response.data[i].recordId // denotes filemaker data id for easier access (1 less loop)
return
}
else if(i == availableBoards.response.data.length) {
console.log("Borad not found, creating it...")
BoardCreate()
}
}
}
我收到此錯誤: Uncaught (in promise) TypeError: Cannot read property 'response' of undefined at BoardCheck 錯誤發生后,我從 BoardGet 得到響應,根據該等待判斷,代碼實際上並沒有等待
我是否以錯誤的方式使用等待?
您不會從BoardGet
函數返回可以await
的Promise
。 在函數內部調用fetch()
之前寫入return
:
async function BoardGet() {
// ...
// return the promise
return fetch("https://link-to-my-database", requestOptions)
.then(response => response.text())
.then(function(result) {
let tempAvailableBoards = result
availableBoards = JSON.parse(tempAvailableBoards)
console.log("available boards: ", availableBoards)
})
.catch(error => console.log('error', error))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.