卡在立即调用功能(IIFE)中

时间:2019-04-27 16:52:18

标签: javascript function loops return iife

所以我的代码中有一个while循环inide这样的IIFE。循环结束后,会执行console.log(“ Hey”),但不会从函数中消失。谁能告诉我发生了什么事?

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

3 个答案:

答案 0 :(得分:-1)

您只需要返回值:

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

但是它返回了promise,所以:

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

答案 1 :(得分:-1)

你说

  

它不是从功能中消失的

是的,它是从函数返回给您的。

只需执行以下操作:

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

您将在控制台中获得done

另一件事,为什么要使用asyncasync一起使用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

答案 2 :(得分:-1)

我在返回之前没有关闭浏览器(使用操纵符),因此程序保持运行。感谢大家的反馈。