Node.js 7.5上的“等待意外的标识符”
我正在尝试Node.js中的await
关键字。 我有这个testing脚本:
"use strict"; function x() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); } await x();
但是,当我在节点运行它,我得到
await x(); ^ SyntaxError: Unexpected identifier
无论我是用node
还是node --harmony-async-await
运行它,还是在Node.js 7.5或Node.js 8(夜间编译)的Mac上的Node.js'repl'中运行它。
奇怪的是,相同的代码在Runkit JavaScript笔记本环境中工作: https ://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b
我究竟做错了什么?
感谢其他评论者和一些其他的研究await
只能用于async
function,例如
async function x() { var obj = await new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); return obj; }
然后我可以使用这个函数作为承诺,例如
x().then(console.log)
或者在另一个asynchronousfunction。
令人困惑的是,Node.js repl不允许你这样做
await x();
像RunKit笔记本电脑一样。
正如其他人所说,你不能在asynchronous函数之外调用“等待”。 但是,要解决这个问题,你可以包装await x(); 在一个asynchronous函数调用。 也就是说,
function x() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); } //Shorter Version of x(): var x = () => new Promise((res,rej)=>setTimeout(() => res({a:42}),100)); (async ()=>{ try{ var result = await x(); console.log(result); }catch(e){ console.log(e) } })();
这应该在节点7.5或更高版本中工作。 也在铬金丝雀片段区域工作。
所以正如别人所build议的等待将asynchronous工作。 所以你可以使用下面的代码来避免使用:
async function callX() { var x_value = await x() console.log(x) } callX()
- 阅读材料的asynchronous编程实践
- 回环asynchronous/等待UnhandledPromiseRejectionWarning问题
- asynchronous调用Node.JS上的mySql
- Mongoose – 模式对象的asynchronousvalidation
- 在node.js中使用asynchronous模块
- 每隔X秒执行一次asynchronousJavaScript代码
- 如何在node.js中创build自定义asynchronous函数?
- meteor:我如何stream和parsing一个大文件的asynchronous节点function?
- 如何在Restify中间件中捕获未处理的Promise拒绝?