Застрял внутри функции немедленного вызова (IIFE) - PullRequest
0 голосов
/ 27 апреля 2019

Так что у меня есть IIFE как таковой в моем коде с внутренним циклом while. Когда цикл завершен, console.log («Hey») выполняется, но не выходит из функции. Кто-нибудь может сказать мне, что происходит?

(function () {
       return new Promise(async resolve => {
            while (i <= fcount) {
                i++;
                //some code
            }
            console.log("Hey");
            resolve("done");
       })
}());

Ответы [ 3 ]

0 голосов
/ 27 апреля 2019

Когда вы говорите

, оно не выходит из функции

Да, оно выходит из функции, возвращающей вам обещание.

Просто сделайте что-то вроде этого:

(function () {
       return new Promise(resolve => {
            while (i <= fcount) {
                i++;
                //some code
            }
            console.log("Hey");
            resolve("done");
       })
}().then(message => console.log(message)));

И вы получите done в консоли.

Другое дело, почему вы используете async, вам всегда нужно использовать async с await.

Вы можете сделать что-то вроде этого:

async function whileFunc() {
  const message = await (function () {
       return new Promise(resolve => {
            while (i <= fcount) {
                i++;
                //some code
            }
            console.log("Hey");
            resolve("done");
       })       
  }());

  console.log(message);
}

, позвонив whileFunc, вы получите message, используя async / await

0 голосов
/ 27 апреля 2019

Я не закрывал браузер до возвращения (используя кукловода), поэтому программа продолжала работать.Спасибо всем за ваш отзыв.

0 голосов
/ 27 апреля 2019

Вам нужно просто вернуть значение:

var result = (function () {
    return new Promise(async resolve => {
        while (i <= fcount) {
            i++;
            //some code
        }
        console.log("Hey");
        resolve("done");
    })
}());

но оно вернет обещание, поэтому:

console.log(result.then(res => console.log(res)))
...