在循环中进行ajax调用

时间:2018-04-14 19:27:22

标签: vue.js babeljs axios

我正在尝试在循环中进行ajax调用。但看起来我们不能,所以我想知道如何避免这种情况。

我正在进行搜索,我有这种格式化数据的方法:

async formatSearchUserByNameResults(results) {
        if (results.length > 0) {
          results.forEach((element) => {
            const currentUserData = await user.getUserById(element.id);
            const aResult = searchBuilders.userBuilder(element);
            aResult.following = currentUserData.folliwing;
            this.searchResults.push(aResult);
          });
        }
      },

getUserById函数进行ajax调用:

async getUserById(userId) {
    const response = await axios.get(`${config.baseUrl}/users/${userId}`, { withCredentials: true });
    return response.data;
  }

但我总是得到这个错误:

  

解析错误:等待是保留字

因为forEach是同步的。

是否可以在循环中进行ajax调用?

由于

1 个答案:

答案 0 :(得分:2)

我不确定为什么会遇到这个特定错误,但有一个问题可能是您传入forEach()的匿名函数不是异步函数。

尝试async (element) => { ...

我会避免使用异步功能,而不是跟踪它们是否完整的结果。您可以将它们包装到Promise.all()或类似的东西中,以了解它们是否已完成。