async await promise的区别

async await primise的区别

  • async/await:是一个用同步思维解决异步问题的方案
  1. async/await是ES7新特性

  2. async/await是写异步代码的新方式,以前的方法有回调函数和Promise

  3. async/await是基于Promise实现的,它不能用于普通的回调函数

  4. async/await与Promise一样,是非阻塞的

  5. async/await使得异步代码看起来像同步代码,解决了异步代码同步化的问题

async定义的函数的返回值是Promise对象,换句话说,async 本身是一个语法糖,而语法糖则代表了带有一定功能的关键字. 所以async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。

async函数

async函数的功能:创建并返回一个promise对象:

        async function foo (p){
    
    
            console.log('foo run',p);
            return 1
        }
        var res = foo(1);
        console.log(res); //Promise { <state>: "fulfilled", <value>: 1 }
						  //<state>: "fulfilled"
						  //<value>: 1

通过上面代码可以看出async创建的foo实则是一个promise对象, async 函数返回的 Promise 的结果由函数执行的结果决定 ,而传递async返回值的方法有以下几种方式:

//1.async函数的 return
        async function foo (p){
    
    
            return p
        }
        var res = foo(1);
        res.then((m)=>{
    
    
            console.log(m); //1
        })
//2: new promise中 resolve实参
        async function foo(){
    
    
            return new Promise((reslove,reject)=>{
    
    
                    reslove(112)
            })
        }
        foo().then((m)=>{
    
    
            console.log(m); //112
        })
//3: then 中return  (catch finally 中retrun)
        async function foo(){
    
    
            return foo1().then((m)=>{
    
    
                return m
            })
        }
        async function foo1(){
    
    
            return 2
        }
        foo().then((n)=>{
    
    
            console.log(n); //2
        })
//4: Promise.resolve() 实参  Promise.reject() 实参
        async function foo(){
    
    
            return Promise.resolve(12)
        }

        foo().then((m)=>{
    
    
            console.log(m);//12
        })

await函数

** await 右侧的表达式一般为 promise 对象, 但也可以是其它的值 **

  1. 如果表达式是 promise 对象, await 返回的是 promise 成功的值
  2. 如果表达式是其它值, 直接将此值作为 await 的返回值
  3. await函数必须写在async函数内
async function f() {
    
    
  // 等同于
  // return 123;
  return await 123;
}

f().then(v => console.log(v))
// 123

function foo(m){
    
    
    return new Promise((reslove,reject)=>{
    
    
         setTimeout(reslove,m)
     })
   }
async function foo1(){
    
    
      for(let i = 1 ; i<5 ; i++){
    
    
          console.log(i); //1,2,3,4每隔1s执行一次
         await foo(1000)
      }
}
foo1()

Promise

是ES6中的一个内置对象,实际是一个构造函数,是JS中进行异步编程的新的解决方案。
可看作者另一片文章

es6中的promise

区别

  1. Promise是ES6,而async是ES7
  2. 使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码。
  3. Promise 中不能自定义使用 try/catch 进行错误捕获,但是在 Async/await 中可以像处理同步代码处理错误 ,简而言之就是Async/await更好的解决了异步代码同步化的问题
  4. Promise有很多并行神器,比如Promise.all\Promise.race等。这些是async没法搞定的

猜你喜欢

转载自blog.csdn.net/qq_52648305/article/details/124334219
今日推荐