У меня есть следующий код:
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