我有一個需求,我們需要使用promise來編寫節點模塊。所以會有3個不同的承諾。只有當他們三人解決時,結果纔會被髮回。我寫了一些代碼。目前的結果是未定義的。讓我知道我可以添加什麼來解決這個問題。如何使承諾返回結果?
這是節點模塊代碼 -
var exports = module.exports = {};
exports.getData = function() {
var Q = require('q');
var result = 0;
// Promise 1
var deferred = Q.defer();
var promise1 = Q.fcall(function() {
setTimeout(function(){console.log('hi');deferred.resolve(9);}, 1000);
return deferred.promise;
});
promise1.then(function(contents) {
result = result + contents;
console.log(contents);
});
// promise 2
var deferred2 = Q.defer();
var promise2 = Q.fcall(function() {
setTimeout(function(){console.log('hi');deferred2.resolve(10);}, 1000);
return deferred2.promise;
});
promise2.then(function(contents) {
result = result + contents;
console.log(contents);
});
// promise3
var deferred3 = Q.defer();
var promise3 = Q.fcall(function() {
setTimeout(function(){console.log('hi');deferred3.resolve(11);}, 1000);
return deferred3.promise;
});
promise3.then(function(contents) {
result = result + contents;
console.log(contents);
});
};
這是調用的代碼 -
var x = require('./example5.js');
var result = x.getData();
console.log(' Result is ' + result);
所以我需要找出一種方法來扶住節點模塊的執行,直到所有的承諾都解決了。
目前輸出 -
結果是不確定的
P.S我對Node.js的新手所以如果這是非常明顯的事情,請原諒!
我認爲這個問題被標記爲重複。但在另一個問題中,我找不到解決方案將結果返回。它仍然返回承諾。
如果承諾是相互的indepentent,Promise.all應該做的伎倆。否則,研究['await'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)來處理嵌套地獄,你可能遇到太多時-ables。 – k0pernikus
將等待與q諾庫的工作? – user3276247
我檢查了另一個問題。它沒有提到如何返回最終結果。要求不是要將承諾退回。 – user3276247