Promise的简单理解及使用

在使用异步编程时,我们会遇到回调地狱的问题,这时我们应该使用Promise。

什么是回调地狱,如下

//假如有三个异步的调用,他们的显示顺序是:点击运行,在一秒后全部显示出来
setTimeout(()=>{
    console.log('上山')
},1000)
setTimeout(()=>{
    console.log('上山打')
},1000)
setTimeout(()=>{
    console.log('上山打老虎')
},1000)

//我们想让它依次经过一秒显示的话,需要改改,如,
setTimeout(()=>{
    console.log('上山')
    setTimeout(()=>{
        console.log('上山打')
        setTimeout(()=>{
            console.log('上山打老虎')
        },1000)
    },1000)
},1000)
//这样就符合要求,但是代码一多,人会蒙掉,人称回调地狱,所以我们要使用promise

ECMAscript 6 原生提供了 Promise 对象。

Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息。

什么是Promise

  • Promise是一种异步编程的解决方案,其实是一个构造函数;
  • 用于解决异步回调地狱的问题,简洁的API使得异步操作更加容易;
  • 可以理解为是一个容器(对象),里面是异步事件。

Promise使用:

var p = new Promise(function(resolve,reject){
    //成功会调用resolve
    //失败会调用reject
});
p.then(function(ret){  //ret是resolve得到的结果,这里可以使用},
    function(ret){  //ret是从reject得到的错误结果}
    )
    
//使用箭头函数,可以写为
var p = new Promise((resolve,reject) => {
    //成功会调用resolve
    //失败会调用reject
});
p.then(ret => {//ret是resolve得到的结果,这里可以使用},
    ret => {//ret是从reject得到的错误结果}
    )

使用Promise处理开始的那个问题

new Promise((resolve,reject) => {
    setTimeout(()=>{
    console.log('上山');
    resolve('上山');
},1000)
}).then(res => {
    return Promise((resolve,reject) =>{		//注意,想要在下一个then中使用这个里面的结果,必须返回Promise
        console.log(res + '打');		//也就是说,想要继续使用then,就得返回一个Promise对象
        resolve(res + '打');
    },1000)
}).then(res =>{
    setTimeout(()=>{
    console.log(res + '老虎');
},1000)
})
posted @ 2022-07-16 11:10  z-laoyao  阅读(31)  评论(0编辑  收藏  举报