如何在 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