我有一堆功能用於提供數據到我的服務。我想循環遍歷它們中的每一個,並在其中一個返回所需結果時立即停止。如果第一個工作,那很好。如果它有異常或數據無效,我想轉到下一個等等。bluebirdjs承諾包裹在一個for循環
我該如何做到這一點?我有下面的代碼:
handleData: function(address) {
var self = this;
return new Promise(function (resolve, reject) {
for (var i = 0; i < self.listAllAvailableProviders.length; ++i) {
var handler = self.listAllAvailableProviders[i];
new handler().getData(address)
.then(function(value) {
Logger.info(value);
resolve(value);
})
.catch(function(err){
Logger.error(err);
})
}
reject("");
});
}
我該如何解決它停止,只要第一個得到正確的數據?我已閱讀bluebirdjs
文檔無濟於事。
編輯 我把break
聲明resolve
後,我得到了這一點:
SyntaxError: Illegal break statement
at Object.exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:513:28)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
您正在運行並行所有請求在'爲'循環。當你找到你喜歡的結果時,所有其他請求已經開始。您可以一次一個序列化您的請求,然後只有在您找不到您喜歡的答案時才繼續下一個請求。那是你要的嗎? – jfriend00
你可以進一步解釋序列化嗎?我想要第一個成功的人,所以如果這個人不行,那就試試下一個。這是使用'sailsjs'。 – KVISH
解釋一下什麼?我不知道你對我的評論有哪些不明白的地方。你想序列化你的請求(一次運行一個)嗎? – jfriend00