首页 > 解决方案 > 需要一个异步函数,在另一个函数中运行,返回一个布尔值而不是一个承诺

问题描述

我正在尝试使用模块https://gmousse.gitbooks.io/dataframe-js/content/doc/api/dataframe.html#chainchain中的函数,并使用 NodeJS。dataframe-js

文档说明If a function returns boolean, it's a filter.这是我想要的。我需要我的一条过滤器行来异步运行,因为部分逻辑需​​要对它将尝试匹配的数据进行 API 调用。

我希望我的链条看起来像这样:

let filteredDf = df.chain(
    row => ![null, '<SLID>'].includes(row.get('SERVICE_ACCT_NBR')), // this works fine
    async row => {
        const account = row.get('ACCOUNT')
        const manager_chain = await getManagersChain(account) // API call, returns an array of managerIds 
        returns (['6G0001', '330002'].some(managerId => manager_chain.includes(managerId)))
    }
)

需要保留至少包含这两个 managerId 之一的帐户

最终发生的是异步函数给出了一个 Promise,它被视为true与实际值无关。

我开始了一个空白测试文件,试图找出如何返回一个布尔值,但我找不到解决方案:

const DataFrame = require('dataframe-js').DataFrame;
let df2 = new DataFrame([
        {col1: '1', col2: '1a'},
        {col1: '2', col2: '2a'},
        {col1: '3', col2: '3a'}
    ], ['col1', 'col2'])

// non-async get [3,2]
console.log(df2.chain(
    row => true
).dim())
// non-async get [0,2]
console.log(df2.chain(
    row => false
).dim())

// expected [0,2] for both but got [3,2]
console.log(df2.chain(
    async row => false
).dim())
console.log(df2.chain(
    row => (async () => false)()
).dim())

我怎样才能让异步函数返回一个布尔值,以便我可以在其中运行等待?

标签: javascriptnode.jsdataframe

解决方案


推荐阅读