最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Promise

    正文概述 掘金(moonwanger)   2021-01-06   451

    一 为什么要使用Promise

    由于异步任务不能直接拿到结果,于是我们传一个回调(函数)给异步任务,当异步任务完成时调用回调,同时调用的时候把异步任务的结果作为回调的参数。但是该方法容易出现回调地狱,代码变得使人看不懂,因此使用Promise。

    二 用法

    //该bool用来帮助模拟成功或失败
    let bool=false
    //封装Promise
    let fn=()=>{
        //返回promise实例
        return new Promise((resolve,reject)=>{
            if(bool){
                //成功执行resolve
                resolve('成功');
            }else{
            	//失败执行reject
                reject('失败');
            }
        })
    }
    //注意,成功和失败的回调函数都只能接收一个参数
    fn().then(data=>console.log(data),error=>console.log(error))
    //bool为false,则执行失败的回调,回调的参数error的值为"失败"
    

    Promise

    三 Promise的其他API

    1. Promise.resolve(result)
    //制造一个成功或失败
    Promise.resolve(1).then(value=>console.log(value))
    Promise.resolve(new Promise((resolve,reject)=>reject('制造失败'))).then(null,error=>console.log(error))
    

    Promise

    1. Promise.reject(reason)
    //制造一个失败
    Promise.reject(2).then(value=>console.log(value),error=>console.log('失败'))
    

    Promise

    1. Promise.all(array)
    //等待全部成功,或者有一个失败
    Promise.all([Promise.reject('err1'),Promise.resolve(1)])
    	.then(value=>console.log(value),error=>console.log(error))
    Promise.all([Promise.resolve(1),Promise.reject('err2')])
    	.then(value=>console.log(value),error=>console.log(error))
    Promise.all([Promise.resolve(1),Promise.resolve(2)])
    	.then(value=>console.log(value),error=>console.log(error))
    Promise.all([Promise.reject('err3'),Promise.reject('err4')])
    	.then(value=>console.log(value),error=>console.log(error))
    

    Promise

    1. Promise.race(array)
    //等待第一个状态改变
    Promise.race([Promise.reject('err1'),Promise.resolve(1)])
    	.then(value=>console.log(value),error=>console.log(error))
    Promise.race([Promise.resolve(1),Promise.reject('err2')])
    	.then(value=>console.log(value),error=>console.log(error))
    Promise.race([Promise.resolve(1),Promise.resolve(2)])
    	.then(value=>console.log(value),error=>console.log(error))
    Promise.race([Promise.reject('err3'),Promise.reject('err4')])
    	.then(value=>console.log(value),error=>console.log(error))
    

    Promise

    1. Promise.allSettled(array)
    //all只要有一个失败就中断,但我们希望等到所有promise执行完,拿到所有结果
    //allSettled等待全部promise状态改变
    Promise.allSettled([Promise.reject('err1'),Promise.resolve(1)])
    	.then(value=>console.log(value),error=>console.log(error))
    //自己模拟实现Promise.allSettled
    Promise.allSettled2=(promiseList)=>{
        return Promise.all(promiseList.map(promise=>promise.then((value)=>{return {status:"ok",value}},(value)=>({status:"not ok",value}))))
    }
    

    Promise


    起源地下载网 » Promise

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元