Нужно передать d в функцию но в консоле показывает пустое поле
'use strict';
const functionsArr = [
() => new Promise((res) => setTimeout(res("JavaScript"), 500)),
() => new Promise((res) => setTimeout(res("is the best"), 250)),
() => new Promise((res) => setTimeout(res("programming language."), 150)),
];
const handler = arr => {
let a = arr[0](),
b = arr[1](),
c = arr[2](),
d = '';
a.then((prod) => {
d += prod + ' ';
return b;
}).then((prod) => {
d += prod + ' ';
return c;
}).then((prod) => {
d += prod;
console.log(d);
});
return new Promise(res => res(d));
};
handler(functionsArr).then((prod) => {
console.log(prod); //JavaScript is the best programming language.
});
Ответы (1 шт):
Автор решения: Alexey Ten
→ Ссылка
Если править ваш код минимально, то его можно исправить например так:
const handler = arr => {
let a = arr[0](),
b = arr[1](),
c = arr[2](),
d = '';
return a.then((prod) => {
d += prod + ' ';
return b;
}).then((prod) => {
d += prod + ' ';
return c;
}).then((prod) => {
d += prod;
return d;
});
};
Но на самом деле надо весь этот ужас выкинуть и написать одной строкой:
const handler = arr => Promise.all(arr.map(f => f())).then(a => a.join(' '));
Ну или если это слишком радикально, то честно расписать
const handler = async arr => {
// запускаем все функции ...
const promises = arr.map(f => f());
// ... ждём их завершения ...
const strings = await Promise.app(promises);
// ... возвращаем строки склеенные через пробел
return strings.join(' ');
}