私はPromise.all()
を使用して約束を返し、複数のユーザーに電子メールを送信する機能を持つモジュールを作成しています。 userSpecificOptions
のための宣言を切り替え、しかしPromise.all()は、約束ごとに同じ値を返すように解決します
After Calling: help
After Calling: promises
After Calling: are
After Calling: tough
While Resolving: tough
While Resolving: tough
While Resolving: tough
While Resolving: tough
Data:
[ { str: 'something', user: 'tough' },
{ str: 'something', user: 'tough' },
{ str: 'something', user: 'tough' },
{ str: 'something', user: 'tough' } ]
:
var getPromise = function(data) {
return new Promise((resolve, reject) => {
console.log("After Calling:\t\t", data.user);
setTimeout(function() {
console.log("While Resolving:\t", data.user);
return resolve(data);
},
Math.random() * 1000);
});
}
var getAllPromises = function(users, options) {
var promises = [];
users.forEach(user => {
var userSpecificOptions = options;
// var userSpecificOptions = {};
userSpecificOptions.user = user;
promises.push(getPromise(userSpecificOptions));
});
return Promise.all(promises);
}
var userlist = ["help", "promises", "are", "tough"];
var commonoptions = {
str: "something",
}
getAllPromises(userlist, commonoptions)
.then(data => console.log("Data:\n", data))
これは私に次のような出力が得られます。
// var userSpecificOptions = options;
var userSpecificOptions = {};
コードをダウンストリップ、私は次のスニペットに問題を再現することができました
が正しい結果を得ます。
After Calling: help
After Calling: promises
After Calling: are
After Calling: tough
While Resolving: help
While Resolving: promises
While Resolving: are
While Resolving: tough
Data:
[ { user: 'help' },
{ user: 'promises' },
{ user: 'are' },
{ user: 'tough' } ]
何が問題になりますか?私は、プロミスがどう働いているのか分からないことがあるかもしれないと感じています。
var userSpecificOptions = options;
あなたはuserSpecificOptions.user
に割り当てるときに、あなたが実際にoptions
を変更します。