javascript - 将 promise 返回的值推送到数组中

标签 javascript reactjs ecmascript-6 es6-promise

我在 react 中有这个基本的 google map api,它只是在 componentDidMount 中的 map 上放置了一些标记。 为此,我需要使用 Geocode 将位置(纽约 Green Street,nr.11)转换为经纬度对。这部分工作正常,代码如下:

  componentDidMount() {
    let usersLocations = [];
    this.props.users.map(user => {
      const userAddress =
        "Street " + user.street + " " + user.nr + ", " + user.city;
      Geocode.fromAddress(userAddress).then(
        response => {
          const result = { user: user, coord: response.results[0] };
          userLocations.push(result);
        },
        error => {}
      );
    });
    console.log(usersLocations) //outputs []
  }

问题是,如果我直接将 setState 设置到 Geocode 的回调中,我会多次执行此操作,因为我正在从 props 迭代用户。 我的想法是将每个位置插入一个数组,然后为整个数组设置一次 setState。 问题是,我无法将结果推送到数组中,因为我在回调中,当我从地理编码获得响应时,usersLocations 数组已经记录到控制台。 我应该如何处理这个问题?

最佳答案

在设置状态前需要使用Promise.all收集所有数据

componentDidMount() {
    Promise.all(this.props.users.map(user => {
      const userAddress =
        "Street " + user.street + " " + user.nr + ", " + user.city;
      return Geocode.fromAddress(userAddress).then(
        response => ({ user: user, coord: response.results[0]}),
        error => {}
      );
    })).then(usersLocations => this.setState({ usersLocations }));
  }

关于javascript - 将 promise 返回的值推送到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52706768/

相关文章:

javascript - 使用 React Dom 创建具有 id 或 class 的元素

javascript - Typescript 将 es6 .js 依赖转译为 es5

javascript - webpack - 具有相同结构但目录不同的多个条目和输出?

javascript - 防止 Atom Beautify 自动格式化 es6 导入/对象解构 (React)

javascript - 在 node.js 中使用多个异步 redis 调用正确放置回调

javascript - jQuery,无法存储$.get函数返回的数据

Javascript 和 AJAX,仅在使用 alert() 时有效

javascript - 查询。 text() 似乎在 IE8 中不起作用

reactjs - 什么会导致 html select 元素无法在浏览器上呈现?

twitter-bootstrap - Bootstrap 工具提示不适用于 React.js