为了账号安全,请及时绑定邮箱和手机立即绑定

Node.js 7.5上的``等待意外标识符''

Node.js 7.5上的``等待意外标识符''

万千封印 2019-12-03 09:52:02
我正在尝试使用awaitNode.js中的关键字。我有这个测试脚本:"use strict";function x() {  return new Promise(function(resolve, reject) {    setTimeout(function() {      resolve({a:42});    },100);  });}await x();但是当我在节点上运行它时await x();      ^SyntaxError: Unexpected identifier是否在Mac上使用Node.js 7.5或Node.js 8(每晚构建)使用node或node --harmony-async-await在Node.js'repl'中运行它。奇怪的是,相同的代码在Runkit JavaScript笔记本环境中也有效:https ://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b我究竟做错了什么?
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

多亏了其他评论者和一些其他研究await只能用于一个async功能,例如


async function x() {

  var obj = await new Promise(function(resolve, reject) {

    setTimeout(function() {

      resolve({a:42});

    },100);

  });

  return obj;

}

然后,我可以将此功能用作Promise,例如


x().then(console.log)

或在另一个异步功能中。


令人困惑的是,Node.js副本不允许您执行


await x();

与RunKit笔记本环境一样。


查看完整回答
反对 回复 2019-12-03
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

正如其他人所说,您不能在异步函数之外调用“ await”。但是,要解决此问题,可以包装await x();。在异步函数调用中。即


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)

    }

})();

这应该在Node 7.5或更高版本中工作。也适用于铬金丝雀片段。


查看完整回答
反对 回复 2019-12-03
?
UYOU

TA贡献1878条经验 获得超4个赞

因此,根据其他人的建议,await可以在异步内部运行。因此,您可以使用以下代码来避免使用then:


async function callX() {

    let x_value = await x();

    console.log(x_value);

}


callX();


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 724 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信