2016-12-20 7 views
0

を、それを使用して、私は次のように変数に約束を割り当てたい:しかし、これが原因タイミングの問題のために動作しません変数として約束を設定し、後で

const createSingleUser = function createSingleUser(userData) { 
    return new Promise((resolve, reject) => { 
    new User(userData) 
    .save() 
    .then((user) => { 
     resolve(user, 'user'); 
    }) 
    .catch((error) => { 
     reject(error); 
    }); 
    }); 
}; 

let createUsers; 
if (users instanceof Array) { 
    // If we have an array, we're batch creating users 
    createUsers = new User().createBatchUsers(users); // returns promise 
} else { 
    // If we have a single object, we're only creating one user 
    createUsers = new User().createSingleUser(users); // returns promise 
} 
createSingleUser(users) 
createUser 
.then((result) => { 
..... 

。 promise chainを2度書く必要なしに、このような構造を作る別の方法がありますか?

@torazaburoと同様に、約束事を作成すると実行が開始されます。それを変数に割り当てることはできますが、変数は実行中の約束を表します。これは私が直面している問題です。これは、createSingleUserが(Promise)オブジェクトであり、関数ではないためです。

+3

こんにちは、私は得ることはありませんあなたはどこで約束を2回書いていますか?なぜ 'createUser.then((result)=> {...'文?)の前に 'IF'ステートメントの後に 'new User()。createSingleUser(users)'を作成していますか? – Andrea

+0

何時*問題?*? – Bergi

+1

約束事を作成すると、それは実行を開始しますが、変数に代入することはできますが、変数は実行中の約束を表すことになります。 promiseを変数に格納する**関数**を格納するには、実行準備が整ったらpromiseを呼び出すことで約束を得ます。上では 'createUser()。then(。 .. –

答えて

3

あなたは既に一度だけの約束チェーンを書いている:

let createdUsers; 
if (users instanceof Array) { 
    createdUsers = new User().createBatchUsers(users); 
} else { 
    createdUsers = new User().createSingleUser(users); 
} 
// createSingleUser(users) 
// ^^^^^^^^^^^^^^^^^^^^^^^ make sure to drop this line 
createdUsers 
.then((result) => { 
    … // handle both cases here 
}) 
1

かなり不明な質問ですので、ここにいくつかの回答があります。

then()の前に、Promise.all(arrayOfPromises)を使用していくつかの約束を待つことができます。

あなたはそれを2回実行する必要がある場合は、関数の中で、あなたのif-elseコードを置くことができます。

function createUsers(users) { 
    if (users instanceof Array) { 
    return new User().createBatchUsers(users); 
    } 
    return new User().createSingleUser(users); 
} 

createUsers(users) 
    .then(() => createUsers(users)) 
    .then(...); 
関連する問題