javascript - 即使await位于Node.js中的异步函数中,如何修复 "await is only valid in async function"?

标签 javascript node.js async-await

我有一些正在尝试运行的示例代码,并且我希望同步调用一些正在执行的异步函数。 我知道您需要向函数添加异步才能进行等待。我已经这样做了。尽管如此,我还是收到以下错误:

  let result = await promise;
               ^^^^^

SyntaxError: await is only valid in async function
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)

对于上下文,这是我的代码:


async function main() {
  var client = Client.fromConnectionString(deviceConnectionString, Protocol);
  fs.stat(filePath, function (err, fileStats) {
  var fileStream = fs.createReadStream(filePath);

  for (var i=0;i<10;i++) {

    let promise = new Promise((res, rej) => {
      client.uploadToBlob('testblob.txt', fileStream, fileStats.size, function (err, result) {
        if (err) {
          console.error('error uploading file: ' + err.constructor.name + ': ' + err.message);
        } else {
          console.log('Upload successful - ' + result);
        }
        res(i);
      });
    })
    let result = await promise;
    console.log(result);
  }

  fileStream.destroy();
  });
}

main();

当我的函数已经异步时,为什么我会收到上述错误?

最佳答案

您正在尝试在未标记为 async(您的回调)的函数内使用 async-await。

只需将回调设为异步等待函数即可。

async function main() {
  var client = Client.fromConnectionString(deviceConnectionString, Protocol);
  fs.stat(filePath, async function (err, fileStats) {
  var fileStream = fs.createReadStream(filePath);

  for (var i=0;i<10;i++) {

    let promise = new Promise((res, rej) => {
      client.uploadToBlob('testblob.txt', fileStream, fileStats.size, function (err, result) {
        if (err) {
          console.error('error uploading file: ' + err.constructor.name + ': ' + err.message);
        } else {
          console.log('Upload successful - ' + result);
        }
        res(i);
      });
    })
    let result = await promise;
    console.log(result);
  }

  fileStream.destroy();
  });
}

main();

关于javascript - 即使await位于Node.js中的异步函数中,如何修复 "await is only valid in async function"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57422318/

相关文章:

c# - 在其阻塞版本中使用方法的异步实现

c# - 为什么在 Windows 服务中阻塞异步会导致死锁?

javascript - 当 html 中存在主干模板时, thymeleaf 无法解析

node.js 错误回调语法

angularjs - 拒绝参与 Google AdSense(第一阶段)的请求

C# AsyncEnumerable 运行/等待多个任务永远不会完成

javascript - 如何关闭visjs事件阴影框?

javascript - 想知道这段代码摘录是否可以代表事件监听器

javascript - Meteor Cordova iOS 视频元素未加载捕获的视频

node.js - Elastic Beanstalk 单实例 SSL .ebextensions 配置文件不起作用