2016-07-12 3 views
-1

私は約束をして遊んでいて、議論のすべての約束が解決した後に私が正しく理解するなら約Promise.all()を見つけました。私は少しのコードすべての決議を約束する

var x = ["one", "two"]; 
var g = 1000; 

function take(element, sec) { 
    return new Promise(function(res, rej) { 
    setTimeout(function() { 
     res(element) 
    }, sec); 
    }) 
} 

Promise.all(x.map(y => { 
    take(y, g); 
    g+=1000; 
})).then(f => { 
    alert('done : ' + f); 
}) 

を試みたが、それはPromise.all瞬時に解決し、任意のバグは、コードのこの小さな作品ではありますかそれの私の理解が悪いのですか?

+4

'map'は' take'の値を返す必要があります。今のところ、 'Promise.all'に未定義のリストを解決するように求めています。 –

答えて

1

すでにtorazaburoはの文がmapコールバックが存在しないことに注意しています。ブロック構文の矢印関数には、明示的にreturnが必要です。次の割り当てg+=1000は無視されます。とにかく地球規模の状態に頼るのは良い習慣ではありません。したがって、私はmapコールバックへの発現をシフトし、ブロック構文ずに矢印を使用します。すでに複数の場所を言ってきたように

var x = ["one", "two"]; 

function take(element, sec) { 
    return new Promise(function(res, rej) { 
    setTimeout(function() { 
     res(element) 
    }, sec); 
    }) 
} 

Promise.all(x.map((y, i) => take(y, 1000*(i+1)))).then(f => alert('done : ' + f)); 
+0

* "通常の矢印とは対照的に、太字の矢印関数は明示的な' return' "*を必要としますか? 「通常」や「太い」の矢印機能はありません。 – naomik

+0

@naomik OK、編集しました。私はまだ私の言葉は何とかしていると思う。 D – ftor

+0

「太い矢の関数」という言葉は、「スキニーの矢印関数」と「太い」の両方の対応があるcoffeescriptから来ていると思いますが、 => '違いは ' - >'は字句 'this'を持たず、' => 'は字句' this'を持たないということです。 – naomik

0

、あなたはPromise.all()が動作するためには、あなたの.map()コールバックからの約束を返す必要があります。ここではそれを行うための1つの簡単な方法です:それはあなたがalert()で何をしようとしてはっきりしていないので、このコードf

Promise.all(x.map(y => { 
    var p = take(y, g); 
    g+=1000; 
    return p; 
})).then(f => { 
    alert('done : ' + f); 
}); 

は、結果の配列です。

関連する問題