Имам следния код:
return Promise.settle(matches, imgur.uploadUrl)
.map(function (inspection) {
if (inspection.isFulfilled()) {
return inspection.value().data.link;
}
return '#';
})
По-подробна версия на горното показва същите проблеми:
return Promise.settle(matches, function(match) { return imgur.uploadUrl(match); })
.then(function(results) {
return results;
})
.map(function (inspection) {
if (inspection.isFulfilled()) {
return inspection.value().data.link;
}
return '#';
})
Където
Promise
= обещанието на синята птицаmatches
= масив от връзки към изображения, извлечени от низimgur
= https://github.com/kaimallea/node-imgur
Очакваното поведение е, че резултатът от .map
е обещание, което се разрешава с масив от връзки към imgur, след като изображенията в оригиналния масив са качени в imgur (или „#“, в случай че качването е неуспешно по някаква причина).
Това, което се случва вместо това, е, че Promise.settle се разрешава незабавно (т.е. изглежда не изчаква качванията на imgur), а inspection.value()
е URL адресът на оригиналното изображение от масива matches
(което дава грешка при опит за прочетете свойството .data.link
на низ).
защо се случва това Защо не се качва в imgur и не се разрешава правилно?
Promise.settle(matches, imgur.uploadUrl).then(function(results) { ... })
, за да видите далиresults
съдържа това, което очаквате, за да видите дали.settle()
не прави това, което искате, или.map()
. - person jfriend00   schedule 27.10.2014.settle()
дава правилните резултати или не? Проблемът с.settle()
ли е или с.map()
. Опитвам се да разделя сложен проблем на парчета, така че човек да знае къде да търси по-нататък проблема. - person jfriend00   schedule 27.10.2014Promise.settle()
, аз само вижте, че обработва първия аргумент (очаква масив от обещания). Чудя се дали документацията на Bluebird за.settle()
просто е грешна относно приемането на функция като втори аргумент, който ще обработи първия масив? Кодът е малко труден за следване, но не виждам какPromise.settle()
някога използва втория аргумент (освен ако това не е правилният код, който гледам по някаква причина). - person jfriend00   schedule 27.10.2014Promise.settle(matches.map(imgur.uploadUrl))
и проработи. Ще подам бъг с bluebird - person Madara's Ghost   schedule 27.10.2014