#javascript
#javascript
Вопрос:
Я не уверен, как использовать возврат a new Promise
по сравнению с использованием a Promise.resolve()
, и хочу убедиться, что мое понимание этого правильное.
Учитывая эти 3 функции ниже:
function testFunc() {
return Promise.resolve().then(() => {
//anything asynchronous in here has now become synchronous and
//execution of result of the function happens after this??
let i = 0;
while (i < 10000) {
console.log(i);
i ;
}
});
}
------
function testFunc2() {
return new Promise((resolve, reject) => {
//anything asynchronous in here is still asynchronous but the
//`resolve()` is then synchronous??
let i = 0;
while (i < 10000) {
if (i === 999) { resolve('I am a test func') };
i ;
}
})
}
------
//synchronous function
function logMe() {
let i = 0;
while (i < 10000) {
console.log("INSIDE LOG ME);
i ;
}
}
Насколько я понимаю, это testFunc()
немедленно разрешает обещание, и все, что там находится, становится синхронным. Так что, если вы должны были выполнить:
testFunc();
logMe();
testFunc()
будет полностью выполнено до logMe()
того, как будет достигнуто и выполнено.
Для testFunc2()
, если бы оно было выполнено в таком порядке:
testFunc2();
logMe();
Я понимаю это как логику внутри, в данном случае цикл while, все равно будет выполняться синхронно и задерживать выполнение следующей функции, logMe()
, но resolve
будет обрабатываться асинхронно.
Ответ №1:
Это не так просто. Вам придется использовать test Func.then(logMe())
. Другим вариантом было бы запустить обе функции в асинхронной функции:
async function run() {
await testFunc();
logMe();
}
Это await
довольно просто — он запускает функцию и ожидает ее завершения, затем запускает следующие строки. async
это просто так, что await
может работать (await не работает вне асинхронных функций).
Я предпочитаю async
/ await
, но многие предпочитают .then
. Это именно то, что вы хотите использовать, оба очень похожи.
Ответ №2:
Если я правильно понимаю, чего вы пытаетесь достичь, вы хотите асинхронно выполнить операцию внутри цикла.
function testFunc2() {
const promises = []
for(let i = 0; i<1000; i ){
promises.push(new Promise((resolve) => {
console.log(i);
resolve()
}));
}
return Promise.all(promises);
}
function logMe() {
let i = 0;
while (i < 5) {
console.log("INSIDE LOG ME");
i ;
}
}
(async() => {
await testFunc2()
logMe();
})();
Комментарии:
1. Спасибо. Я просто пытаюсь понять, что делают эти функции и как они по-разному влияют на цикл событий