• 你们平时会给函数包async 吗?
  • 发布于 2个月前
  • 56 热度
    0 评论
  • 雷布斯
  • 0 粉丝 37 篇博客
  •   
这几天在在研究公司的内部私有的脚手架,,,阅读源码真的是一件很头疼的事情,尤其是在你根本没接触过这个东西的时候。
首先做的第一件事情,问一下别人一般脚手架是基于什么做。=>“node.js”
然后看了十几篇文章,搞清楚了,脚手架是什么,怎么做,以及市场上目前的流行做法。
最后弄了自己的一款脚手架(大部分也是借鉴别人的做法)。

对脚手架略知一二之后,我开始阅读本公司的脚手架源码。我觉得大致流程应该差不多。。。。然而。。。果然为了KPI ,不走寻常路。
最让我惊奇的是:这位制作教授叫的大哥,动不动就用async 包函数,,,然我觉得很奇怪,我就上网搜一下关于这方面的。。。(有点偏离我的目的)。
const getDetail = async (url) => {
  return new Promise((resolve, reject) => {

    request(url, (err, response, body) => {
      try {
        resolve(JSON.parse(body))
      } catch (ex) {
        reject(ex)
      }
      resolve(null)
    })

  })
}

首先一上来。
我们来分析一道题。
 const async1 = async function() { 
 console.log('async1 start')
 await async2()
  console.log('async1 end')
}

const async2 = async function() { 
   console.log('async2')
 }

 console.log('script start')

 setTimeout(function() { 
  console.log('settimeout')
 }, 0);

 async1();

 new Promise(function(resolve) { 
   console.log('promise1')
   resolve()
 }).then(function() { 
   console.log('promise2')
 })

 console.log('script end')

请输出打印的顺序?
首先应该是 
script start => async1 start =>async2 => promise1 => script end =>????
这边我就会思考 await 和 promise.then() 那个执行顺序优先???
async 包一层其实就是返回一个promise
请看下方代码:
 async function testAsync() {
   return new Promise((arr) => { 
     console.log(arr)
   }, (err) => { 
       console.log(err)
   })
 }

 const result = testAsync();
 console.log(result);

看打印的结果

所以对于上面的那道题目可以理解为包了一层promise,其结果是:
script start => async1 start =>async2 => promise1 => script end =>async1 end =>promise2 =>settimeout

然而结果:

后来我上网找了一大圈,说async 其实是
promise.then().then().then() 感觉这样好折腾的样式,于是我改造了一下题目,
const async1 = async function() { 
 console.log('async1 start')
 await async2()
  console.log('async1 end')
}

const async2 = async function() { 
   console.log('async2')
 }

 console.log('script start')

 setTimeout(function() { 
  console.log('settimeout')
 }, 0);

 async1();

 new Promise(function(resolve) { 
   console.log('promise1')
   resolve()
 }).then(function() { 
   console.log('promise2')
 }).then(function(){
     console.log('promise3')
 }).then(function(){
     console.log('promise4')
 })

 console.log('script end')

发现结果:

我去,还真的是这样的。。。哈哈哈。。感觉像是一个bug
后面有去看了一下其他人说的,说以后Chrome版本会修复这个。。。。

言归正传:你们平时会给函数包async 吗?感觉好别扭~~~
用户评论