首页 > 解决方案 > promise.all 渲染两次并返回 undefined

问题描述

大家好,我正在处理一个反应原生项目,我正在离线工作,所以我必须离线存储数据,当互联网恢复时,我必须将用户重定向到屏幕并将数据发送到网络并更改百分比,但我的问题是fetch 渲染两次,并且在所有 promis 之后返回的数据是未定义的,并且通过服务器和数据库中的方式传递到服务器的 fetch 很好地改变了

这是我的功能

export const syncOfflinedata = activities => {
  return dispatch => {
    Promise.all(
      activities.map(item => {
        Api()
          .put(putEvaluation(item._id), {evaluation: item.evaluation})
          .then(data => {
            dispatch(setProgressporcentage(1 / activities.length));
          })
          .catch(err => {
            console.log(err.message);
          });
      }),
    )
      .then(datafinished => {
        console.log('finished', datafinished);
      })
      .catch(e => {
        console.log(e);
      });
  };
};

标签: javascriptreact-native

解决方案


map 方法应该有 return ,除非它以简短的形式写在一行中:

export const syncOfflinedata = activities => {
  return dispatch => {
    Promise.all(
      activities.map(item => {
        return Api()
          .put(putEvaluation(item._id), {evaluation: item.evaluation})
          .then(data => {
            dispatch(setProgressporcentage(1 / activities.length));
          })
          .catch(err => {
            console.log(err.message);
          });
      }),
    )
    .then(datafinished => {
      console.log('finished', datafinished);
    })
    .catch(e => {
      console.log(e);
    });
  };
};

推荐阅读