javascript - 如何在继续嵌套承诺之前让代码等待响应?
问题描述
我有一些类似于以下的代码:
functionA (list) {
list.forEach(fucntion (item) {
functionB(item);
});
}
functionB (item) {
// format data
service.init(item) // first promise
.then(function (data) {
// error handle
(functionC (randomStuff) {
// error handle
service.getResponse(data) // second promise
.then(function (response) {
// this is the response value I need to pass back
})
})()
}
})
我需要在开始时让 forEach 循环发送一个项目并等待响应,然后再继续处理列表中的下一个项目。关于我如何做到这一点的任何想法?
解决方案
您可以使用async
andawait
关键字使您的函数异步,因此您可以在函数内同步解决 Promise:
async functionB(item) {
var data = await service.init(item);
(async functionC(randomStuff) {
var response = await service.getResponse(data);
return response;
})();
}
文档:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
推荐阅读
- jquery - 使用 jquery 查找活动元素和接下来的 3 个元素
- arrays - 尝试优化此 ruby 代码以进行数组排序/匹配
- node.js - node-cron 可以每分钟运行几秒偏移吗
- homebrew - `brew cleanup` 命令不会删除旧的 mysql 目录
- javascript - 如何使用javascript更改表单的方法名称
- c++ - 在 Windows 上管道到 ffmpeg
- python - Pygame 与 cx_Freeze 一起使用,但当我运行可执行文件时,窗口中没有显示任何内容
- python - 有没有办法将 mxn 矩阵(1)与 pxn 矩阵(2)批量相乘,其中矩阵(2)的每一行都是标量?
- python - 为什么此替换方法无法正常工作
- python - 从 100 开始数到 999