@Danbka

Как в Promise.then() передать результат предыдущего then?

Привет. Вопрос конечно сформулирован коряво, но объяснить можно только на примере.

Итак, работаю с Rutoken Plugin, используя промисы. Есть следующий код:

RuTokenPlugin.enumerateDevices().then(function(devices) {
			// Получил устройства
			return devices;
		}).then(function(devices) {
			// с каждого устройства получаю идентификаторы сертификатов, с помощью Promise.all() передаю их дальше
			var certPromises = [];
			for (var d in devices) {
				certPromises.push(RuTokenPlugin.enumerateCertificates(d, RuTokenPlugin.CERT_CATEGORY_USER));
			}
			return Promise.all(certPromises);
		}).then(function(certificates) {
			// массив с идентификаторами сертификатов
		})


Проблема в том, что, получив идентификаторы сертификатов, я не могу далее воспользоваться методом getCertificate(deviceId, certId), т.к. он принимает не только идентификатор сертификата, но и идентификатор устройства, которого в последнем then() у меня нет.

Как изменить код, чтобы можно было воспользоваться getCertificate()?
  • Вопрос задан
  • 738 просмотров
Решения вопроса 1
Идея примерно такая, device можно закинуть через замыкание.
function getPromise(d) {
    return RuTokenPlugin.enumerateCertificates(d, RuTokenPlugin.CERT_CATEGORY_USER)
        .then(function(cert) {
             return {
                 device: d,
                 cert: cert
            };
        });
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Самый простой и понятный способ - сохранять devices в какую-то внешнюю переменную, глобальную для всей цепочки и обращаться к ней.
Можно ли упростить асинхронный код на Promise?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час