1、困惑
    感觉好像了解这些api,之前使用到它们,一般都是在请求数据的时候。Promise是解决了原始异步方法如:XMLHttpRequest回调地狱的问题(主要是通过解决了异步同步混写难以阅读,同步代码只会在Promise构造函数一开始创建的时候执行,异步代码只会在then或者catch中调用执行。)。至于async、await,它们是基于promises的语法糖,使异步代码更易于编写和阅读。通过使用它们,异步代码看起来更像是老式同步代码。
    但是除了请求数据时候用到。其他业务场景我真的是一无所知。最近,学习到nodeJs的多线程时,看了别人写的代码,逻辑清楚,结构分明不用说了。主要是这里async,那儿又来了个async,Promise。还有嵌套的。真的感觉绕晕了。在大佬的实战程序中,我迷惑的点,除了在什么时候该使用它们外,还对async,promise。内部应该放哪些代码的时候才会用到它们去执行。所以这篇文章来总结一波,涨涨姿势。
    链接:大佬的nodeJs的多线程技术实战

    2、分析
    返回Promise对象:Promise和async都是返回一个Promise对象。之前以为它们整体直接就成了异步代码,会等主线程执行完毕同步代码,再执行。但是,发现它们还会直接执行它们内部的同步代码。Promise会把它内部的同步代码和异步代码还是要分开执行。例如:new Promise((resolve, reject) => {console.log(‘同步代码’);setTimeout(resolve, 0, ‘参数’)});这里会先打印出“同步代码”,然后返回一个Promise对象。单独在函数上加async,跟Promise的效果一样,只是标识了该函数是一个异步函数(不是直接返回结果,而是返回一个Promise)。
    不搭配await:之前以为async必须搭配await一起使用,不然会报错。但是MDN文档说(它避免了同步函数为支持使用 await 带来的任何潜在开销)。
    搭配await:当 await 关键字与异步函数一起使用时,它的真正优势就变得明显了 —— 事实上, await 只在异步函数里面才起作用。它可以放在任何异步的,基于 promise 的函数之前。它会暂停代码在该行上,直到 promise 完成,然后返回结果值。在暂停的同时,其他正在等待执行的代码就有机会执行了。在调用任何返回Promise的函数时使用 await。await最大的作用也就是:可以直接获取到Promise执行完的结果,而摆脱了调用链。注意:await会阻塞后面的代码,使用时需要注意。

    3、总结
    Promise和async都是以返回Promise对象而非实际结果为输出。当内部存在异步操作,要直接输出结果,使用async搭配await;
    反过来结果以Promise对象输出的。要想直接获取结果那也只有使用await,所以在看到别人代码中写到await,第一反应这是个异步函数、第二反应是await后面跟的表达式肯定返回了一个Promise对象、第三反应是通过await,我肯定可以拿到这个Promise对象返回的值。第四反应是在我await后面的代码会被阻塞到。
    Promsie构造函数内部就通过异步代码内在异步完成时执行Promise提供的成功回调resolve传值给then中,去执行后续的操作。Promise就在需要经过一些操作操作,想自定义结果什么时候返回的时候使用。

    4、对于源码的分析,后续跟进。。。_