[英]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.