2016-12-13 7 views
1

bluebirdconcurrenyに問題があります。基本的に私は、私の約束が次々と解雇されることを望む。私はこれがbluebirdを使って行うことができることを発見しました。これは私のコードです:私は尊敬何javascript - ブルーバードが約束を正しく開始していない

var getdep = Promise.promisify(
    function getdep(module, cb) { 
    console.log(module + " ...start ...") 
    ls(module, function(data) { 
     cb(null, data); 
    }); 
    }); 

Promise.all([0,1,2,3,].map(function(data){ 
    return getdep("[email protected]"); 
}, {concurrency: 1})) 
.then(function(all){ 
    console.log(all); 
}) 
.catch(function(err){ 
    console.log(err); 
}); 

は({concurrency: 1})のようなものです。

[email protected] ...start ... 
loading: [email protected]@latest 
loading: [email protected]@latest 
loading: [email protected]@latest 
loading: [email protected]@latest 
.... 
[email protected] ...start ... 
loading: [email protected]@latest 
loading: [email protected]@latest 
loading: [email protected]@latest 
loading: [email protected]@latest 

... ので

しかし、私が午前の

です: bluebirdを意味

[email protected] ...start ... 
[email protected] ...start ... 
[email protected] ...start ... 
[email protected] ...start ... 
loading: [email protected]@latest 

が同時にすべての私の約束を開始しています。 私のコードで何が間違っているのか教えていただけますか?おかげ

+0

あなたはタイプミスがありますが、 'Promise.all'の代わりに' Concurrency'を 'Array.map'に設定します。と約束チェーンの各ステップで何かを返す方が良い – stasovlas

答えて

2
あなたはPromise.mapないアレイ#マップを使用している

Promise.all(
    [0,1,2,3,].map(function(data){ 
//  array.map 
     return getdep("[email protected]"); 
    }, {concurrency: 1}) // end of array.map 
) 
.then(function(all){ 
    console.log(all); 
}) 
.catch(function(err){ 
    console.log(err); 
}); 

Array.mapは{並行処理:1}理解していない引数が - それが使用しているコールバック

ためthisArgとしてPromise.mapを使用するには、このようなPromise.mapを使用してください。

Promise.map([0,1,2,3,], function(data){ 
    return getdep("[email protected]"); 
}, {concurrency: 1})) 
.then(function(all){ 
    console.log(all); 
}) 
.catch(function(err){ 
    console.log(err); 
}); 
関連する問題