【发布时间】:2017-10-05 08:21:45
【问题描述】:
我有以下要求:
- 通过调用内部函数 (getLines()) 获取“行”列表。
- 选择第一行,执行操作
- 上一个动作完成后,选择下一行,做同样的动作
- 对所有行重复(3-20 行,具体取决于用户)
我有以下代码:
App.Lines = response.data;
for (var _i = 0; _i < App.Lines.length; _i++) {
var makeCallPromise = new Promise(
function(resolve, reject) {
Session.connection.ol.makeCall(App.Lines[_i], callBackFunction(response) {
//this can take up to 30 seconds to respond...
resolve(response.data);
}, errorCallBackFunction(message) {
reject(message.error);
}, bareJid);
}
)
makeCallPromise.then(function(fulfilled) {
console.log("PROMISE WORKED!!!!!", fulfilled);
})
.catch(function(error) {
console.log("PROMISE FAILED!!!!!", error);
});
}
我希望循环在继续循环之前等待解决承诺,但事实并非如此。 我的问题是是否有可能在解决方案完成之前停止循环。 注意 - 我正在使用 bluebird JS 库进行承诺。 谢谢!
亲切的问候,
加里
【问题讨论】:
-
我认为你必须以某种方式
return承诺。就像在这种情况下,fulfilled是您在承诺中使用的关键短语。 -
不是循环整个事情,而是循环 makeCallPromise 并将这些承诺推送到一个数组。然后使用 Promise.all(array) 并在 promise.all 之后添加
then()调用。结果将是所有promsies 将在第一个then()被调用之前解决,因此所有数据都可以再次循环。或者,根本不使用循环,而是在前者解决后进行下一个 makeCallPromise。 -
@Shilly 谢谢,我已经尝试在 marvel308 提供的答案中使用它,使用 Promise.each()。我的回应是关于我做了什么和发生了什么。
-
Promises 101 - Promise 不会使异步代码同步:p
标签: javascript for-loop promise bluebird