【问题标题】:JS 'await is only valid in async function' in Promise.all() function [duplicate]Promise.all()函数中的JS“等待仅在异步函数中有效”[重复]
【发布时间】:2019-10-19 06:09:39
【问题描述】:

我正在尝试使用 Promise.all() 函数将一堆请求等待所有请求完成,而不是像这样手动完成所有获取:

var data = await Promise.all([
        fetch('https://jsonplaceholder.typicode.com/posts').then((response) => response.json()),
        fetch('https://jsonplaceholder.typicode.com/albums').then((response) => response.json()),
        fetch('https://jsonplaceholder.typicode.com/users').then((response) => response.json())
      ]);

我想让它动态化,像这样发出 N 个获取请求:

       let promiseList = [];
        try {
            for (let url of requestUrls) {
                promiseList.push(fetch(url).then((response) => response.json()));
            }

            var data = await Promise.all(promiseList);

但我在await Promise.all() 行中收到此错误Uncaught SyntaxError: await is only valid in async function,如果我删除等待,我会收到Promise {<pending>}(index):79 error:TypeError: data is not iterable

这是我的完整代码:https://jsfiddle.net/ham7g82e/1/

从这些获取中获取数据我缺少什么?

【问题讨论】:

  • 错误信息的哪一部分你不明白?
  • 你应该使用.map()
  • 你的await 的父函数没有async 运算符如async function myFunc(){ ... },我们需要看看你是如何定义包装函数的。

标签: javascript asynchronous promise


【解决方案1】:

不要使用 await,而是使用 Promise.then

Promise.all(promiseList).then(data => {
  document.getElementById("result").innerHTML = data;
  console.log(data);

  for (var i of data) {
    console.log(`RESPONSE ITEM \n`);
      for (var obj of i) {
        console.log(obj);

      }
  }
});

【讨论】:

    【解决方案2】:

    要使用 await,它必须是异步函数的一部分。

    async function functionName() {
     //You can use await in here, because you used the async keyword
    }
    

    【讨论】:

    • 函数和方法都是 JavaScript 中的函数。
    • 函数是window对象的方法,所以没有区别
    • 谢谢!我没有正式学习JS。我编辑了我的答案:)
    【解决方案3】:

    如果执行此代码的函数不是异步的,您可以使用 .then() 从 Promise 中获取值。不需要使用 await。

    查看此文档:Promise.all()

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2021-01-14
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多