Каждый вызов функции async
дает вам Обещание взамен, но Обещания не могут (разумно) добавляться к номерам, поэтому вы получаете NaN
взамен.
Если вы хотитечтобы иметь возможность использовать результат Обещания, вы должны await
it и использовать полученное выражение . Если вы await
Обещание и затем попытаетесь использовать исходное Обещание, у вас останется Обещание, а не значение, поэтому вам следует присвоить await
ed Обещание переменной, например, изменить
let I0 = loop('01', 10)
let I1 = loop('02', I0 * 1000)
await I0
await I1
до
let I0 = loop('01', 10)
const resolveValueI0 = await I0;
let I1 = loop('02', resolveValueI0 * 1000)
await I1
(вы не можете позвонить второму loop
, пока не будет I0
, потому что второму loop
нужно число с разрешением I0
Обещание. Либо так, либо передайте Обещание I1
, и I1
правильно потребите его с .then
или await
)
и
let I0 = loop('11', 10)
await I0
let I1 = loop('12', I0 * 1000)
await I1
до
let I0 = loop('11', 10)
const resolveValueI0 = await I0;
let I1 = loop('12', resolveValueI0 * 1000)
await I1
async function loop(label, I) {
console.log('%s - Looping for %d times.', label, I)
console.time(label)
for (i = 0; i < I; ++i) {
}
return Promise.resolve(I)
}
//
async function demo0() {
// Refer - https://stackoverflow.com/a/45479579/919480
let I0 = await loop('01', 10)
let I1 = loop('02', I0 * 1000)
await I0
await I1
}
//
async function demo1() {
// Refer - https://stackoverflow.com/a/45479579/919480
let I0 = loop('11', 10)
const result = await I0
let I1 = loop('12', result * 1000)
await I1
}
//
async function demo2() {
await loop('21', 10).then(async (i) => {
await loop('22', i * 1000)
})
}
//
(async () => {
await demo0()
await demo1()
await demo2()
})()