如何在 readline 中定义异步函数

Posted

技术标签:

【中文标题】如何在 readline 中定义异步函数【英文标题】:how to define an async function in readline 【发布时间】:2019-04-10 06:43:13 【问题描述】:

我在 nodejs 中编写了一个异步函数,它返回数据库中查询的值。我测试了这个查询并且它有效。但我的问题在于 readline 的定义。当我运行此代码时,我收到一个错误:

const a = await Movie.find().sort('-year').where('year').gt(X).lt(Y).sort('rank')
                  ^^^^^

SyntaxError: await is only valid in async function

我应该如何将 readline 函数定义为异步函数? 这是我的功能:

async function returnMoviesBetweenXandY()

const rl = readline.createInterface(
    input: process.stdin,
    output: process.stdout
);

 rl.question('enter the first number : ', (X) => 
    rl.question('enter the second number : ', (Y) => 
        const a = await Movie.find().sort('-year').where('year').gt(X).lt(Y).sort('rank')
        const temp =await Promise.map(a, getTitle)
        return temp
        // rl.close();
    );
);


returnMoviesBetweenXandY().then(function(result)console.log(result))

【问题讨论】:

【参考方案1】:

(X) =>(Y) => 函数之前使用 async 关键字作为 lambda 表示。如:

rl.question('enter the first number : ', async (X) => 
rl.question('enter the second number : ', async (Y) => 
    const a = await Movie.find().sort('-year').where('year').gt(X).lt(Y).sort('rank')
    const temp =await Promise.map(a, getTitle)
    return temp
    // rl.close();
);

);

基本上,如果您在函数体中使用await 关键字,则该函数应标记为async。在您的情况下,您在 lambda 函数中使用 await 关键字。所以应该标记为async

【讨论】:

谢谢。我没有得到以前的错误,但我得到了另一件事。当我运行此代码时,我得到'输入第一个数字:未定义'

以上是关于如何在 readline 中定义异步函数的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在(Node.js 8. 目前)上的 readline.on 函数下使用 promise

如何修复返回“未定义”的异步函数?

如何模拟节点readline?

如何避免 python 3x 中 readline() 函数中的新行? [复制]

如何在一个类中实现异步

如何使用调度库运行异步函数?