1. ホーム
  2. javascript

[解決済み] 約束の配列を順番に実行するにはどうしたらいいですか?

2023-06-12 15:46:53

質問

私は連続した順序で実行する必要がある約束の配列を持っています。

var promises = [promise1, promise2, ..., promiseN];

RSVP.allを呼び出すと、並列に実行されます。

RSVP.all(promises).then(...); 

しかし、順番に実行するにはどうしたらいいのでしょうか?

手動で次のように積み重ねることができます。

RSVP.resolve()
    .then(promise1)
    .then(promise2)
    ...
    .then(promiseN)
    .then(...);

というように、約束の数は変化し、約束の配列は動的に構築されることが問題です。

どのように解決するのですか?

すでに配列で持っているのであれば、すでに実行されています。もし、プロミスを持っているならば、それはすでに実行されているのです。これはプロミスには関係ないことです(つまり、C#のように Task のようなものではありません。 .Start() メソッド) を使用することができます。 .all は何も実行しません。 プロミスを返すだけです。

プロミスを返す関数の配列がある場合。

var tasks = [fn1, fn2, fn3...];

tasks.reduce(function(cur, next) {
    return cur.then(next);
}, RSVP.resolve()).then(function() {
    //all executed
});

または値。

var idsToDelete = [1,2,3];

idsToDelete.reduce(function(cur, next) {
    return cur.then(function() {
        return http.post("/delete.php?id=" + next);
    });
}, RSVP.resolve()).then(function() {
    //all executed
});