【问题标题】:How to resolve the Syntax error : await is only valid in async function?如何解决语法错误:await 仅在异步函数中有效?
【发布时间】:2019-11-03 05:40:32
【问题描述】:

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

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

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

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);

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

请帮忙

【问题讨论】:

标签: javascript node.js asynchronous


【解决方案1】:

await 只能在标记为async 的函数中调用。 所以,你可以创建一个async IIFE 并从那里调用httpGet

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

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

如果您有困惑,可以查看this

【讨论】:

  • 谢谢它的工作。但我无法将数据存储在全局变量中。以下是我尝试过的。变量结果; (async function(){ result = await httpGet('link'); $.response.setBody(result); })() console.log("结果是"+result);
  • 我得到的结果是未定义的。如何检索数据并存储在全局变量中?在这里我也无法设置身体。它返回空值
  • 您将得到未定义的结果,因为console.log 将在启动async 函数后立即运行。您不能同时使用同步和异步操作。
  • 您对如何解决此问题有任何想法吗?我被这个困住了
  • 这取决于你想对数据做什么。如果您想在 ui 中显示它,请制作一个占位符页面,并在数据存在后更改页面。或者,如果您想使用路由将其作为 api 响应返回,您也可以这样做。
【解决方案2】:

这对我有用。

我最初有:

exports.doSomething = functions.database.ref('/posts/{postId}').onCreate((snapshot, context) => {

    // ... 

    const [response] = await tasksClient.createTask({ parent: queuePath, task });
});

但我在这里添加了单词async(在开括号快照之前)然后错误消失了

       // here
.onCreate(async (snapshot, context) => {

所以现在代码是

exports.doSomething = functions.database.ref('/posts/{postId}').onCreate(async (snapshot, context) => {

    // ... 

    const [response] = await tasksClient.createTask({ parent: queuePath, task });
});

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2019-09-12
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    相关资源
    最近更新 更多