Я создаю функцию в узле js Express, которая будет вызываться клиентами для загрузки содержимого.Возвращаемое значение обратно от Promise to Promise.All
Содержимое должно быть загружено из разных источников, и ответ должен быть отправлен обратно только после завершения всех загрузок (содержимое, загруженное узлом, зашифровано и отправлено обратно вызывающему клиенту). Итак, все функции загрузки завернуты в Promise.all (download1(), download2(), download3())
Одна из функций загрузки не только загружает контент, но также генерирует json и отправляет его обратно основная функция. Основная функция устанавливает его как заголовок ответа.
Функция API называется клиентом выглядит следующим образом
function downloadAll(request, response) {
// Download content only after folders are created
return createDirPromise.then(function (result) {
var statusJson = ... // somehow get the status json from download1() so that it can be send to the client
return Promise.all([download1(contentsJson), download2(contentsJson), download3(contentsJson)]);
})
.then(function (result) {
return new Promise(function (resolve, reject) {
// Create zip. Here is the zip creation logic.
// Once zip is created, send it to client as a buffer
zipdir(zipFolderPath, function (err, buffer) {
if (err) {
console.log('Error while zipping!!! '+JSON.stringify(err));
return reject({ data: null, resp_status_code: 500, resp_status_message: JSON.stringify(err)});
} }
console.log('Zipping successful');
return resolve(
{
data: buffer,
resp_status_code: 200,
resp_status_message: "Zip succeeded",
headers: statusJson
});
})
})
.catch(function (error) {
return {
data: 'Error in any of above ' + error,
resp_status_code: 500,
resp_status_message: 'Error while zipping'
}
}
Это как download1 функция выглядит
function download1(contentsJson) {
return new Promise(function(resolve, reject) {
//set the status json here
var statusJson = { "key1": "value1", "key2": "value2"};
//do the download stuff here and return the statusJson
console.log('Downloading complete, return the status so that it can be send to the client');
resolve(statusJson);
}
Я знаю, как отправить заголовки обратно клиенту. Моя задача - получить статусJson в функции downloadAll. Функция load1 вызывается из Promise.all(). Как только download1, download2 и donwload3 завершают «. Then». Я не могу найти способ получить данные (statusJson), возвращенные donwload1 внутри downloadAll.
Что 'console.log (результат)' делает, делает он не содержит данные, которые вы ищете? – Bergi