当前位置: 首页 > 知识库问答 >
问题:

如何解决语法错误:wait仅在异步函数中有效?

万俟浩
2023-03-14

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

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

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

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函数返回的数据。现在我得到了上面提到的错误。但是不使用wait,我得到body的值为{}。

请帮帮忙

共有2个答案

阳英朗
2023-03-14

这对我很有效。

我最初有:

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 });
});
祁修诚
2023-03-14

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

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

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

如果你有困惑,你可以看看这个。

 类似资料:
  • 我在Sequelize的节点8上。js 当尝试使用时,出现以下错误。 代码: 获取以下错误: 我做错了什么?

  • 我正在尝试设置一些数据在使用这个节点js代码的FIRESTAR: 在控制台中运行文件: 给我这个错误: 如何解决这个问题

  • 在开始之前,我承认有几个问题可能听起来与我的标题类似,但是,我读到的所有问题都比我的代码更复杂,解释似乎与我的情况无关。 有人能帮我理解我的代码(下面的代码片段)中发生了什么导致了这个错误吗 未捕获SyntaxError:await仅在异步函数和顶级模块体中有效。 据我所见,导致错误的位于“顶层”主体中。或者是顶级身体的其他意思?谢谢! 编辑区别于其他建议(类似)的问题在这里:我的问题不涉及htt

  • 试图使一个chrome扩展刮一个网站,但它总是在内容完全加载之前(在manifest.json的文档读取后尝试) 每次有人叫我: 还尝试:

  • 我有一个异步函数,它在代码中的某个地方按setInterval运行。此函数定期更新一些缓存。 我还有一个不同的同步函数,它需要检索值——最好是从缓存中检索,但如果是缓存未命中,则从数据源检索(我意识到以同步方式进行IO操作是不明智的,但假设在这种情况下需要这样做)。 我的问题是,我希望同步函数能够等待异步函数中的值,但是不可能在非异步函数中使用关键字: 现在,通过将中的逻辑提取到一个新的同步函数中

  • 我想使用谷歌云视觉API。我复制了代码,但出现以下错误:SyntaxError:await仅在异步函数中有效。 有没有办法解决这个问题? 非常感谢