【发布时间】:2018-11-25 10:37:33
【问题描述】:
我有很多问题。
每个问题都有一些答案,这些答案是要上传的一些文件。
一切都很顺利,而不是 API 调用没有等待 Promise.all 完成。
步骤如下:
-
通过问题数组映射,如果问题是
image类型,则获取所有文件并尝试上传。 -
上传后解决上传中的所有承诺并添加对该问题的答案
Promise.all();的结果 -
在所有问题的循环准备就绪后,进行 API 调用以保存到数据库中,该数据库现在不等待上传所有文件并解析该数组中的所有内容。
export function sendReview (taskId, companyId, questions, navigation) {
return async (dispatch) => {
dispatch(actions.sendReview.pending());
try {
let user = await getUser();
user = JSON.parse(user);
questions.map(async question => {
if (question.type === 'image') {
let images = question.answer;
if (images.length > 0) {
const results = images.map(async image => {
return await imageApi.upload(image).then(res => {
return res.url;
});
});
question.answer = await Promise.all(results).then(completed => {
return completed;
});
}
}
});
const data = await tasksApi.sendReview({
task_id: taskId,
company_id: companyId,
user_id: user.id,
questions: JSON.stringify(questions)
});
if (data.status === 201) {
markAsCompleted(taskId);
navigation.navigate('MyTasks');
dispatch(actions.sendReview.success({}));
}
else {
dispatch(actions.sendReview.error());
}
} catch (err) {
dispatch(actions.sendReview.error(err));
}
};
}
这是使用的函数。
我如何确保.map() 中的所有项目都准备就绪并在之后进行 API 调用?
【问题讨论】:
-
在内部循环中,您正在执行
await Promise.all(results)。在外循环上,你什么都不做!
标签: javascript react-native asynchronous promise async-await