es6中Promise和async结合使用,是否可优化

发布于 2022-09-12 03:25:55 字数 1721 浏览 11 评论 0

在Promise对象内部使用await是否可优化

// a.js

const PublicClass = {
    list: async () => {
        ... // 此处业务逻辑等待时间比较长,但最终会有一个返回结果
    }
}
module.exports = {
    test: async () => {
        // 此处在promise的回调函数加上async是否可优化
        return new Promise(async(resolve, reject) => {
            cosnt res = await PublicClass.list()
            resolve(res)
        })
    }
}

上面的写法可以达到预期的结果,我现在想问一下,有没有可优化的写法。
业务需求PublicClass.list是必须有async的,若直接用以下写法无法达到预期效果
   // a.js

const PublicClass = {
    list: async () => {
        ... // 此处业务逻辑等待时间比较长,但最终会有一个返回结果
    }
}
module.exports = {
    test: async () => {
        cost res = await PublicClass.list()
        return res
    }
} 


我现在用的是谷歌的puppeteer,具体的代码如下:

    // 这是文档给的例子
   
   const puppeteer = require('puppeteer');  
   puppeteer.launch().then(async browser => {  
   const page = await browser.newPage();  
   await page.goto('https://baidu.com');  
    await browser.close();
  });
  
  
 const puppeteer = require('puppeteer'); 

 const PublicClass = {
   list: async () => {
    try {
        const browser = await puppeteer.launch()
        const page = await browser.newPage();  
        await page.goto('https://baidu.com');  
        await browser.close();
    } catch (err) {
        console.log(err)
    }
  }
// 
module.exports = {
    test: async () => {
        return new Promise(async (resolve, reject) => {
            cosnt res = await PublicClass.list()
             resolve(res)
        })
    }
} 

若不在Promise的回调里使用async,是否有更好的写法,请赐教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最舍不得你 2022-09-19 03:25:55

为什么不在list里面返回一个promise?

---------分割线-------------
对于async/await 的使用我来补充一下

async/await 只是Generator实现的语法糖而已,而Generator的语法是用*来修饰函数,用yield来修饰步骤,但是yield只支持返回Promise或者Thunk函数,所以如果你需要await一个函数,那个被await的这个函数不一定需要async来申明,而只要返回一个Promise就好了。

function promise () {
    return Promise.resolve('hello');
}

async function _await() {
   try {
     let res = await promise(); // 发现了没?
     console.log(res);
   } catch (e) {
     console.error(e);
   }
}

所以说只要你返回的是一个promise,那么就可以在任何async函数中被await,这一点希望题主可以明白,所以为什么我回答说,为什么不在list这个函数里面返回一个promise

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文