2017-05-23 9 views
0

私は約束を使ってノードモジュールを書く必要があります。だから3つの異なる約束があります。結果は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); 

だから私はまでノードモジュールの実行を保持する方法を把握する必要がありすべての約束が解決されます。

現在出力されている -

結果は、私がnode.js.する初心者です未定義

P.Sですだから、これがとても明白なものなら、私を許してください!

質問は重複していると思います。しかし、他の質問では、結果を返すための解決策を見つけることができませんでした。それはまだ約束を返す。

+0

約束は互いのindepententしている場合、Promise.allはトリックを行う必要があります。そうでなければ、あなたがあまりにも多くを持つときに実行する可能性のある入れ子地獄に対処するために、['await'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await)を研究してください - 可能です。 – k0pernikus

+0

q約束のライブラリーでの作業を待ちますか? – user3276247

+0

他の質問を確認しました。最終的な結果を戻す方法については言及していません。要件は約束を取り戻すことではありません。 – user3276247

答えて

2

Promise.all()を使用すると、iterable引数のすべての約束が解決されたときに解決する単一のPromiseを取得したり、拒否する最初の約束の理由で拒否したりすることができます。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

var p1 = Promise.resolve(3); 
var p2 = 1337; 
var p3 = new Promise((resolve, reject) => { 
    setTimeout(resolve, 100, 'foo'); 
}); 

Promise.all([p1, p2, p3]).then(values => { 
    console.log(values); // [3, 1337, "foo"] 
}); 
+0

Promise.allはまだ約束を返します。私は最終結果を返す必要があります。 – user3276247

+0

'に'渡された値を使用してください。 – shabs

関連する問題