如果一个返回了前哨值,则停止等待剩余的诺言

周杰伦

我有一个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'
    }
克莱康

Promise.all只要包含的任何承诺被拒绝,由的返回的承诺就会被拒绝。考虑到这一点,您可以抛出哨兵值而不是返回它,而只需在的try / catch中检查该值即可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'
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

定义一个导航指令,等待到诺言返回

来自分类Dev

定义一个导航指令,等待到诺言返回

来自分类Dev

检查 Observable(http 请求)是否返回了一个值,以及它是否没有等待它?

来自分类Dev

Qt 5.5 QDateTime :: addSec函数如果增加12小时(43200秒),则在一个月的最后一天返回了错误的值

来自分类Dev

承诺`then`,该函数不返回任何值,而函数返回另一个诺言

来自分类Dev

蓝鸟:等待一个诺言实现

来自分类Dev

Excel VLOOKUP函数从错误的行返回了一个值-但没有尾随空格

来自分类Dev

创建一个Tkinter类并等待返回值

来自分类Dev

等待异步函数在 Typescript 中返回一个值。

来自分类Dev

Django-get()返回了不止一个它返回了700

来自分类Dev

MultipleObjectsReturned- get() 返回了不止一个 mPurchase -- 它返回了 2

来自分类Dev

等待多个诺言作为一个整体,一个角度地吗?

来自分类Dev

PHP Round函数返回了一个奇怪的结果

来自分类Dev

给定的代码返回了一个空的JSON输出

来自分类Dev

错误:沉浸式生成器返回了一个新值,并且*修改了它的草稿。返回一个新值*或*修改草稿

来自分类Dev

如果没有行匹配,则返回一个值

来自分类Dev

如果ORDER BY上的IF语句仅返回一个值

来自分类Dev

如果ORDER BY上的IF语句仅返回一个值

来自分类Dev

如果只有一个值,则Java 8 Collector返回一个值

来自分类Dev

如果一个 api 返回空值,则调用另一个 api

来自分类Dev

Javascript / Angularjs:在进入foreach循环的下一个迭代之前,等待诺言的实现

来自分类Dev

多个未连接的异步事件如何等待一个诺言

来自分类Dev

SQL - 如果特定值的某些条件返回 FALSE,则返回另一个值

来自分类Dev

如果另一个单元格具有多个值之一,则返回一个值

来自分类Dev

函数调用另一个函数,但不等待返回值吗?

来自分类Dev

Angular 2 在启动另一个函数之前等待函数返回值

来自分类Dev

SQL过程返回一个表的所有值,如果存在另一个表则返回是/否

来自分类Dev

Javascript-异步等待并获取-返回值,而不是诺言?

来自分类Dev

确定返回了两个可能的结果对象中的哪一个

Related 相关文章

  1. 1

    定义一个导航指令,等待到诺言返回

  2. 2

    定义一个导航指令,等待到诺言返回

  3. 3

    检查 Observable(http 请求)是否返回了一个值,以及它是否没有等待它?

  4. 4

    Qt 5.5 QDateTime :: addSec函数如果增加12小时(43200秒),则在一个月的最后一天返回了错误的值

  5. 5

    承诺`then`,该函数不返回任何值,而函数返回另一个诺言

  6. 6

    蓝鸟:等待一个诺言实现

  7. 7

    Excel VLOOKUP函数从错误的行返回了一个值-但没有尾随空格

  8. 8

    创建一个Tkinter类并等待返回值

  9. 9

    等待异步函数在 Typescript 中返回一个值。

  10. 10

    Django-get()返回了不止一个它返回了700

  11. 11

    MultipleObjectsReturned- get() 返回了不止一个 mPurchase -- 它返回了 2

  12. 12

    等待多个诺言作为一个整体,一个角度地吗?

  13. 13

    PHP Round函数返回了一个奇怪的结果

  14. 14

    给定的代码返回了一个空的JSON输出

  15. 15

    错误:沉浸式生成器返回了一个新值,并且*修改了它的草稿。返回一个新值*或*修改草稿

  16. 16

    如果没有行匹配,则返回一个值

  17. 17

    如果ORDER BY上的IF语句仅返回一个值

  18. 18

    如果ORDER BY上的IF语句仅返回一个值

  19. 19

    如果只有一个值,则Java 8 Collector返回一个值

  20. 20

    如果一个 api 返回空值,则调用另一个 api

  21. 21

    Javascript / Angularjs:在进入foreach循环的下一个迭代之前,等待诺言的实现

  22. 22

    多个未连接的异步事件如何等待一个诺言

  23. 23

    SQL - 如果特定值的某些条件返回 FALSE,则返回另一个值

  24. 24

    如果另一个单元格具有多个值之一,则返回一个值

  25. 25

    函数调用另一个函数,但不等待返回值吗?

  26. 26

    Angular 2 在启动另一个函数之前等待函数返回值

  27. 27

    SQL过程返回一个表的所有值,如果存在另一个表则返回是/否

  28. 28

    Javascript-异步等待并获取-返回值,而不是诺言?

  29. 29

    确定返回了两个可能的结果对象中的哪一个

热门标签

归档