promise async 和 await

在vue中发现一个问题,如果在mounted中同时要调用两个接口,分别是接口a和接口b,但是接口b需要用到接口a的数据,假设这个数据为id。如果按平常方式写就会出现向接口b发送请求的时候,id为空。这就是因为两个接口都是异步请求,我们需要把他们编程同步的。

Promise

Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。

一个 Promise 必然处于以下几种状态之一:

  • 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
  • 已兑现(fulfilled): 意味着操作成功完成。
  • 已拒绝(rejected): 意味着操作失败。

async和await

asyncawait关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为。

❗️async函数可能包含0个或者多个await表达式。await表达式会暂停整个async函数的执行进程并出让其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝之后才会恢复进程。promise的解决值会被当作该await表达式的返回值。使用async / await关键字就可以在异步代码中使用普通的try / catch代码块。

function settime1(){
    console.log("我在return外面")
    return new Promise(resolve=>{
        setTimeout(function(){
            console.log("正在进行中...")
            resolve('resolved');
        },5000)
    })
   
}
function add(){
    let a = 1
    let b = 1
    // console.log(a+b)
    return a+b
}
async function result(){
   const r1 = await settime1() // await通过promise暂停了线程,等待运行完毕
   console.log(r1)
   const r2 = add()
   console.log(r2)
   
}

result()

总结

在我们平常写接口的时候,最好还是用async/await 配合promise进行封装,不然就会导致一开始提出的问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人理解:因为javascript是单线程的,所以他的异步相当于将一些任务丢到运行队列的尾部,就像是Android...
    ironman_阅读 3,013评论 0 1
  • 关于异步 JavaScript脚本执行是“单线程”(脚本解释引擎是单线程的),但会GUI线程,网络请求线程等JS引...
    江ls阅读 619评论 0 0
  • 前言 Promise async generator是ES6之后才被提出来的,他们都能够用来解决以前JS异步调用产...
    _玖柒_阅读 632评论 0 4
  • 回调地狱 回调地狱嵌套多个方法调用会创建错综复杂的代码,会难以理解与调试。当想要实现更复杂的功能时,回调函数也会存...
    Inlight先森阅读 2,819评论 0 4
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,742评论 0 5