За дадения пример тук:
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);
});
Сега, ако искам да изградя обекта props динамично? като
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