promise 特点总结

(1)promise的resolve不支持第二个参数的传递(不是大问题)

process.stdin.setEncoding('utf8');



let promise = new Promise(function(resolve, reject) {

  process.stdin.on('readable', () => {
    var chunk = process.stdin.read();
    if (chunk !== null) {
      if(chunk==1)
      {
        resolve({test1:'succ1',test2:'succ2'},{"resolve":resolve,"reject":reject});
      }
      else{
        reject({test1:'error1',test2:'error2'},{"resolve":resolve,"reject":reject});
      }
      // process.stdout.write(`data: ${chunk}`);
    }
  });



});

promise.then(function(value1,status) {
  console.log("succ第一次传递then的值是");
  console.log(value1);
  if(1)
  {
    console.log("第一次then(succ)里的status是");
    console.log(status);
    // 当reject,resolve作为第二个参数传递时会报出status==undefined的错误
  }



},function(value1,status){
  console.log("err第一次传递then的值是");
  console.log(value1);
});
promise.then(function(value1) {
  console.log("succ第2次传递then的值是");
  console.log(value1);

},function(value1) {
  console.log("err第2次传递then的值是");
  console.log(value1);

});

(2)promise 不支持第一个then之后的分支选择(是个大问题)

process.stdin.setEncoding('utf8');



let promise = new Promise(function(resolve, reject) {

  process.stdin.on('readable', () => {
    var chunk = process.stdin.read();
    if (chunk !== null) {
      if(chunk==1)
      {
        resolve({test1:'succ1',test2:'succ2',"resolve":resolve,"reject":reject});
      }
      else{
        reject({test1:'error1',test2:'error2',"resolve":resolve,"reject":reject});
      }
      // process.stdout.write(`data: ${chunk}`);
    }
  });



});

promise.then(function(value1) {
  console.log("succ第一次传递then的值是");
  console.log(value1);
  if(1)
  {


    // 测试作为一个参数传递的情况
     console.log("第一次传递then的reject是");
     console.log(value1.reject);
     value1.reject("then2");
     //**分支选择错误**
     //**走的仍然是"succ第2次传递then的值是"这个提示**
  }



},function(value1,status){
  console.log("err第一次传递then的值是");
  console.log(value1);
});
promise.then(function(value1) {
  console.log("succ第2次传递then的值是");
  console.log(value1);

},function(value1) {
  console.log("err第2次传递then的值是");
  console.log(value1);

});



(3) promise不支持return式的参数变化机制(小问题)

process.stdin.setEncoding('utf8');



let promise = new Promise(function(resolve, reject) {

  process.stdin.on('readable', () => {
    var chunk = process.stdin.read();
    if (chunk !== null) {
      if(chunk==1)
      {
        resolve({test1:'succ1',test2:'succ2'},{"resolve":resolve,"reject":reject});
      }
      else{
        reject({test1:'error1',test2:'error2'},{"resolve":resolve,"reject":reject});
      }

    }
  });



});

promise.then(function(value1,status) {
  console.log("succ第一次传递then的值是");
  console.log(value1);
  if(1)
  {

      // value1.test1="succthen";
      // delete value1.test2;
      // 直接在原有的resolve对象上修改生效
      // return {"test1":"succthen"};
      // 不支持返回新值的状态改变机制
  }



},function(value1,status){
  console.log("err第一次传递then的值是");
  console.log(value1);
});
promise.then(function(value1) {
  console.log("succ第2次传递then的值是");
  console.log(value1);

},function(value1) {
  console.log("err第2次传递then的值是");
  console.log(value1);

});

总结:
promise实用场景
这里写图片描述

  • 一次分支决定一生
  • 可以再向下传递中改变状态量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值