首页 > 其他 > 详细

Promise用法

时间:2019-08-26 19:51:26      阅读:131      评论:0      收藏:0      [点我收藏+]

1. 引入原因

    js(nodejs)的耗时请求(如sql和file)都是异步返回。如果调用嵌套太多,则会造成“地狱回调”如下:

sayhello("a", function(err){
    sayhello("b", function(err){
        sayhello("c", function(err){
            sayhello("d", function(err){
                sayhello("e", function(err){
                    console.log("end");
                });    
            });
        });
    });
});

  js想通过一种方案使得以上问题得以解决,得到如下的调用样式。

sayhello("a")
.then(value=>
    {
        sayhello("b");
    })
.then(value=>
    {
        sayhello("c");
    })
.then(value=>
    {
        sayhello("d");
    })
.then(value=>
    {
        sayhello("e");
    })
.then(value=>
    {
        sayhello("end");
    });

 

2. 基本用法

    Promise的构造函数的参数接受2个参数,都是函数。一个是resolve一个是reject。resolve函数将promise的状态职位fulfilled,reject将promise的状态置为rejected。

    这两个函数的具体实现实在then中。如下:

console.log("1111 ");
new Promise((resolve,reject)=>{
    setTimeout(() => {
if(true) resolve("3333 resolved")
else
reject("3333 rejected"); console.log("2222");//此处的2222,在3333world之前输出。 }, 2000); }) .then(value=>{ console.log(value+‘:resolved‘) },value=>{
  console.log(value+":rejected");
});

  

3. 链式调用(返回的是个promise类型)。then中的resolve函数是直接返回的一个非promise的类型,那么这个返回值会作为下一个then的输入参数。

const p = new Promise(function(resolve,reject){
  resolve(1);
}).then(function(value){ // 第一个then // 1
  console.log(value);
  return value * 2;
}).then(function(value){ // 第二个then // 2
  console.log(value);
}).then(function(value){ // 第三个then // undefined
  console.log(value);
  return Promise.resolve(‘resolve‘); 
}).then(function(value){ // 第四个then // resolve,value是个string类型
  console.log(value);
  return Promise.reject(‘reject‘); 
}).then(function(value){ // 第五个then //reject:reject,value是个string类型
  console.log(‘resolve:‘ + value);
}, function(err) {
  console.log(‘reject:‘ + err);
});

  


Promise用法

原文:https://www.cnblogs.com/dongfangchun/p/11414406.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!