美文网首页
js中的promise

js中的promise

作者: 13号的下雪天 | 来源:发表于2019-08-26 16:50 被阅读0次

Promise 是 JavaScript 语言提供的一种标准化的异步管理方式,它的总体思想是,需要进行的IO,等待或者其他异步操作的函数,不返回真是的结果,而返回一个“”承诺“”,函数的调用方可以在合适的时机,选择等待这个承诺兑现,(通过Promise的then方法实现)
Promise 的基本用法示例如下

function sleep (duration){
  return new Promise(function(resolve,reject){
       setTimeout(resolve,duration);
  })
}
sleep(1000).then(()=> console.log("finished"))

接下来我们试试跟 setTimeout 混用的 Promise,在这段代码中,我设置了两段互不干扰的异步操作:通过setTimeout执行console.log('d'),通过promise执行console.log('c')

var r = new Promise(function(resolve,reject){
  console.log('a')
  resolve ()
})
setTimeout(()=>console.log('d',0)
r.then(()=>console.log('c'));
console.log('b')

这段代码的执行结果是a,b,c,d,其原因在于Promise产生的是javaScript引擎内部的微任务,而setTimeout是浏览器API,它产生宏观任务,微任务始终先于一个宏观任务
为证实这一结果我们可以设计一个实验,执行一个耗时一秒的promise

    setTimeout(()=>console.log("d"), 0)
    var r = new Promise(function(resolve, reject){
        resolve()
    });
    r.then(() => { 
        var begin = Date.now();
        while(Date.now() - begin < 1000);
        console.log("c1") 
        new Promise(function(resolve, reject){
            resolve()
        }).then(() => console.log("c2"))
    });

执行结果为c1,c2,d

在ES6语法当中又新增加了async/await
async/await 是 ES2016 新加入的特性,它提供了for,if等代码结构来编写异步的方式。它运行的基础是promise
它的用法

function sleep(duration) {
    return new Promise(function(resolve, reject) {
        setTimeout(resolve,duration);
    })
}
async function foo(){
    console.log("a")
    await sleep(2000)
    console.log("b")
}

相关文章

  • js-Promise基础

    js-Promise基础(第三周) Promise含义 promise意思为允诺、许诺、承诺在js中为了解决编写代...

  • ES6 promise理解

    一、promise 是什么 1、Promise 是 JS 中解决异步编程的一种方案。 拓展:js中解决异步编程的...

  • 深入了解下Promise

    Promise 意义 Promise 的诞生与 Javascript 中异步编程息息相关,js 中异步编程主要指 ...

  • js 中的Promise

    特点 1.对象的状态不受外界影响。2.一旦状态改变,就不会再变,任何时候都可以得到这个结果。3.无法取消Promi...

  • js中的promise

    Promise 是 JavaScript 语言提供的一种标准化的异步管理方式,它的总体思想是,需要进行的IO,等待...

  • js中的promise

  • js中的promise

    概念 promise是异步编程的一种解决方案,它是一个对象,它可以获取异步操作的信息。 有三种状态:pending...

  • OC如何实现Promise

    JS中Promise和Ramda中的curry化函数,真的很好用。我就在想: 如何在OC中实现Promise 如何...

  • js实现“锁”

    在js中需要让某些异步的任务按顺序执行的时候可以Promise.then(Promise).then..... 但...

  • 手写Promise

    基本实现new Promise 和 then /catch方法 Promise.js test.js测试 调用手...

网友评论

      本文标题:js中的promise

      本文链接:https://www.haomeiwen.com/subject/uskdectx.html