Для данного примера здесь:
https://github.com/petkaantonov/bluebird/blob/master/API.md#props---promise
Promise.props({
pictures: getPictures(),
comments: getComments(),
tweets: getTweets()
}).then(function(result) {
console.log(result.tweets, result.pictures, result.comments);
});
Теперь, если я хочу создать объект реквизита динамически? Нравиться
var propObj = {};
if (cond1) {
propObj.tweets = getTweets();
}
if (cond2) {
propObj.pictures = getPictures();
}
if (cond3) {
propObj.comments = getComments();
}
Promise.props(propObj)
.then(function(result) {
console.log(result);
});
Приведенный выше код не будет работать должным образом. Функции getTweets, getPictures, getComments будут обязательно выполняться во время создания propsObj.
Однако на самом деле я ищу, чтобы выполнять эти функции параллельно во время фазы Promises.props(propObj)
, а затем возвращать объект результата. Есть ли способ сделать это?
Promises.props(propObj)
? Все они возвращают обещания и будут поставлены в очередь и технически запущены параллельно. При назначении в строкеPromises.props(propObj)
они выполняются последовательно (чтобы вернуть обещание) во время построения объекта.Promises.props(propObj)
просто ждет завершения всех свойств вpropObj
перед вызовом.then()
. - person Steven10172   schedule 23.08.2015getPictures()
,getComments()
иgetTweets()
вызываются ДО того, как фактически вызываетсяPromise.props()
— так же, как в вашем примере кода. То, что передаетсяPromise.props()
, является объектом, чьи свойства являются обещаниями. Начальная функция, сгенерировавшая промисы, уже вызвана, и операция уже запущена. Ваш код НЕ работает иначе, чем пример Bluebird. Не уверен, какую проблему вы пытаетесь решить. - person jfriend00   schedule 23.08.2015propObj
, написавPromise.props({/* object literal */}).then(...);
. - person Roamer-1888   schedule 23.08.2015