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

在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,是否有更好的写法,请赐教

阅读 2.3k
1 个回答

为什么不在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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题