之前,我有一个要求做到以下几点:JavaScript的诺言 - 等待清晰度的运动上
- 通过调用内部函数获取的“线”的列表(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);
});
}
我的希望是,循环将等待解决的承诺,它继续循环之前,然而,事实并非如此。 我的问题是在分辨率完成之前是否可以暂停循环。 注 - 我正在使用蓝鸟JS库作为承诺。 谢谢!
亲切的问候,
加里
我认为你必须以某种方式“返回”承诺。就像在这种情况下,“履行”是你在诺言中使用的关键词。 – ZombieChowder
而不是循环整个事情,循环makeCallPromise并将这些承诺推送到一个数组。然后使用Promise.all(array)并在promise.all后添加'then()'调用。结果将会是所有的promsies都会在调用第一个'then()'之前解析,所以所有的数据都可以重新循环。或者,根本不要使用循环,但在前者解析后进行下一次makeCallPromise。 – Shilly
@Shilly谢谢,我已经尝试在由marvel308提供的答案中使用此方法,并使用Promise.each()。我的回应是关于我所做的和发生的事情。 – Gary