繁体   English   中英

Javascript如何在触发下一个函数之前正确等待一个函数?

[英]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函数返回可以awaitPromise 在函数内部调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM