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

问题描述 投票:-1回答:3

所以我在我的代码中有一个WIFE,里面有一个while循环。当循环完成时,console.log(“Hey”)执行但它不会退出该函数。谁能告诉我发生了什么事?

(function () {
       return new Promise(async resolve => {
            while (i <= fcount) {
                i++;
                //some code
            }
            console.log("Hey");
            resolve("done");
       })
}());
javascript function loops return iife
3个回答
-1
投票

你只需要返回值:

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)))

-1
投票

当你说

它没有出来的功能

是的,它来自函数,为您提供承诺。

做这样的事情:

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

你将在控制台中获得done

另一件事,为什么你使用async你总是需要使用asyncawait

你可以这样做:

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


-1
投票

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.