nodejs: async/await. Объясните новичку пару моментов [дубликат]

67
20 марта 2022, 14:00
На этот вопрос уже дан ответ здесь:
Как дождаться завершения всех обещаний? (1 ответ)
Закрыт 2 года назад.

Будут ли эти записи равны? Это ведь то же самое, правильно я понимаю?

func() {
    return new Promise((resolve, reject) => {
        ///
        resolve();
    })
}
async func() {
    ///
    return true;
}

И вот эти записи. Я так понимаю, вторая будет выполняться быстрее, в несколько потоков. А первая запись - будет постоянно ожидать выполнения функции getProducts. Верно?

 for(var i = 0; i<=1000; i++) {
var res = await getProduct();   
console.log(res);
}
for(var i = 0; i<=1000; i++) {
getProduct().then(res=>{
    console.log(res)
})}

Как создать ожидание выполнения асинхронной функции? (await - не решение). Хочу сделать через переменную this.progress. Но не понимаю как. Пока this.progress не будет равняться false, не выполнять console.log('stop')

Есть такой вывод:

2 add
3 add
4 add
stop
2 commit
3 commit
4 commit

А надо:

2 add
3 add
4 add
2 commit
3 commit
4 commit
stop

Вот тестовый код:

 async run() {
    var data = [{id: 1, name: 'Alex', value: 18}, {id: 5, name: 'Sergey', value: 10}, {
        id: 6,
        name: 'Elena',
        value: 90
    }];
    var row = 2;
    this.progress = false;
    for (var item in data) {
        console.log(row+" add");
        ws.getCell("A" + row).value = data[item].id;
        ws.getCell("B" + row).value = data[item].name;
        ws.getCell("C" + row).value = data[item].value;
        //ws.getCell("D" + row).value = this.getRand();
        this.setStat(row, ws).then(res=>{
            ws.getRow(res).commit();
            console.log(res+" comitt"); 
        });
        row++;
    }
    console.log("stop");
}
async setStat(row, ws) {
    this.progress = true;
    var w = ["D", "E", "F"];
    var b = [];
    for(var ww in w) {
        var res = await this.getRand();
        ws.getCell(w[ww]+row).value = res;
        b.push(res);
    }
    return row;
}
Answer 1

Будут ли эти записи равны? Это ведь то же самое, правильно я понимаю?

В одном случае вернется true, в другом - undefined, так что не совсем

Promise.all() позволяет параллельно запустить несколько промисов и продолжить выполнение, когда они все будут выполнены

const promises = [];
for (var item in data) {
    console.log(row+" add");
    ws.getCell("A" + row).value = data[item].id;
    ws.getCell("B" + row).value = data[item].name;
    ws.getCell("C" + row).value = data[item].value;
    //ws.getCell("D" + row).value = this.getRand();
    promises.push(
        this.setStat(row, ws).then(res=>{
            ws.getRow(res).commit();
            console.log(res+" comitt"); 
        });
    );
    row++;
}
Promise.all(promises).then(
    () => {console.log("stop");}
);
READ ALSO
Адаптация UI под любые экраны - unity

Адаптация UI под любые экраны - unity

Есть slider, который находится над передвигающимся объектомСделал я это так:

103
Ошибка при преобразовании значений textBox

Ошибка при преобразовании значений textBox

У меня на форме есть textBox1 и textBox2, в которых выводится информация о выбранном предметеМне нужно, чтобы на этой же форме в textBox3 выводился результат...

89
Есть ли в С# WPF string resources файл?

Есть ли в С# WPF string resources файл?

Есть ли возможность поместить все стринги в отдельный файл и присваевать его значения как ресурс в каждом месте где нужно?

204
Смена картинки при нажатии кнопки. Кнопок много

Смена картинки при нажатии кнопки. Кнопок много

Подскажите, пожалуйста, как можно реализовать большое количество кнопок с одинаковыми двумя изменяющимися картинками так, чтобы не писать...

62