亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果返回標記值,則停止等待剩余的承諾

如果返回標記值,則停止等待剩余的承諾

翻閱古今 2023-01-06 16:00:43
我有一個函數 validateTables() ,它使用調用(每個表)到查詢 api 的異步輔助函數 queryTable() 來驗證數據是否存在于多個表中。要通過驗證,數據必須存在于每個表中。如果表為空,輔助函數將返回 false。我目前在 Promise.all() 中有一組調用,用于檢查結果數組中是否有任何錯誤值。為了性能,我寧愿停止等待任何剩余承諾的解決,如果一個承諾解決為假。Promise.race() 和 .all() 不起作用,因為它們關心的是承諾何時或是否解決,而不是返回值。我可以在不丟失異步函數并行處理的情況下執行此操作嗎?通用功能:async queryTable(query, params) {        try {            returnData = []            for await (const returnItem of api.executeQuery(query, params)){                returnData.push(returnItem)            }            if (returnData.length > 0) {                return true;            }            return false;        }        catch (err) {            throw new Error(`${JSON.stringify(err)}`);        }    }async validateTables() {       const allDataExists = await Promise.all([                this.queryTable(query, params),                this.queryTable(query2, params2),                this.queryTable(query3, params3),                // and so on for several more            ])            if (!allDataExists.includes(false)) {                return 'OK'            }            return 'Invalid'    }
查看完整描述

1 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

Promise.all一旦任何包含的承諾被拒絕,返回的承諾將被拒絕??紤]到這一點,您可以拋出哨兵值而不是返回它,只需在await.


async queryTable(query, params) {

    try {

        returnData = []

        for await (const returnItem of api.executeQuery(query, params)){

            returnData.push(returnItem)

        }


        if (returnData.length > 0) {

            return true;

        }

        throw false;

    }

    catch (err) {

        throw new Error(`${JSON.stringify(err)}`);

    }

}


async validateTables() {

    try {

        const allDataExists = await Promise.all([

            this.queryTable(query, params),

            this.queryTable(query2, params2),

            this.queryTable(query3, params3),

            // and so on for several more

        ])

    } catch(e) {

        if(e instanceof Error) throw e

        return 'Invalid'

    }

    return 'OK'

}


查看完整回答
反對 回復 2023-01-06
  • 1 回答
  • 0 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號