我已经阅读了async/await,在阅读了几篇文章之后,我决定自己测试一下。然而,我似乎不明白为什么这行不通:
async function main() {
var value = await Promise.resolve('Hey there');
console.log('inside: ' + value);
return value;
}
var text = main();
console.log('outside: ' + text);
控制台输出以下内容(节点v8.6.0):
> outside: [object Promise]
> inside:嘿,大家好
为什么函数内部的日志消息之后执行?我认为创建async/await的原因是为了使用异步任务执行同步执行。
是否有一种方法可以使用函数内部返回的值,而不使用main()后的.then() ?
其他解决方案缺乏POSIX兼容性的一些重要细节:
你需要…
成功时报告0退出状态,失败时报告非0退出状态。
向标准输出流发出错误。
#!/usr/bin/env node
async function main() {
// ... await stuff ...
}
// POSIX compliant apps should report an exit status
main()
.then(() => {
process.exit(0);
})
.catch(err => {
console.error(err); // Writes to stderr
process.exit(1);
});
如果使用command等命令行解析器,则可能不需要main()。
例子:
#!/usr/bin/env node
import commander from 'commander'
const program = new commander.Command();
program
.version("0.0.1")
.command("some-cmd")
.arguments("<my-arg1>")
.action(async (arg1: string) => {
// run some async action
});
program.parseAsync(process.argv)
.then(() => {
process.exit(0)
})
.catch(err => {
console.error(err.message || err);
if (err.stack) console.error(err.stack);
process.exit(1);
});