如何解决语法错误:等待仅在异步功能中有效?

时间:2019-06-20 11:49:47

标签: javascript node.js asynchronous

我已经编写了一个代码,以使用promise从异步调用返回一些数据。当我尝试执行时,我收到“语法错误等待仅在异步函数中有效”,并且我也收到无法代理应用程序的请求...错误:连接ECONNREFUSED。

我不确定为什么会出现这些错误

我曾在函数调用之前尝试过使用async,但是没有用

var http = require('https');
var httpGet = function(url) {
  return new Promise (function(resolve, reject) {
    http.get(url,function(res) {
      res.setEncoding('utf8');
      var body = ''; 
      res.on('data', function(chunk){ 
        body += chunk;
        console.log("The body is "+ body);
      });
      res.on('end',function(){resolve(body);});
    }).on('error', reject);
  });
};

var body = await httpGet('link');
$.response.setBody(body);

我希望变量主体具有从httpGet函数返回的数据。现在,我遇到了上述错误。但是不使用await,我得到body的值为'{}'。

请帮助

1 个答案:

答案 0 :(得分:4)

await只能在标记为async的函数中调用。 因此,您可以制作一个async IIFE并从那里调用httpGet

(async function(){
    var body = await httpGet('link');
    $.response.setBody(body);
})()

基本上,当您使用一个asynchronous操作时,还需要使整个流程异步。因此,async关键字kindof使用ES6生成器函数并使其返回承诺。

如果有困惑,可以检查this