node.js - promise流程控制问题
阿神
阿神 2017-04-17 13:02:50
[Node.js讨论组]

node.js 才学习 几个月,仅仅部分经验而异。还望 批判式阅读 。。

Promise 我用来做异步控制。

大致分为情况,

上下串行依赖的 执行流程
Promise.reslove(xxx)

.then()
.then()
.then()
.catch();

这样的操作,很简单每一步依赖于上一步运行的结果,异常跳出,结果最后返回。

并行无依赖操作 执行流程
Promise.all([xxx,xxxx,xxx])

.then()
.then()
.then()
.catch();

注:此处的无依赖是指 all参数 数组中的各个方法 无相互依赖。

所有的异步操作存放在 all 方法的 数组参数中。

这样 逻辑都很简单,很清晰,
但是实际情况往往不是,比如:
我们有时候会出现
Promise.reslove(xx)
.then(function(result){

if(result){
  //跳出 这个 promise 直接返回。
  //这个怎么处理
...这里  这种写法就做不到 ,并且结果返回不能为error
}else{
  return xxx;  //继续向下执行。。
}

})
.then()
.then()
.catch();
渴求这中逻辑下的 promise 好的解决方法。。。。。。
这是朋友一种解决方案,但是感觉很诡异。。。。。。。
return new Promise(function (resolve, reject) {

Promise.resolve(xxx).then((user) => {
  if (user) {
    resolve({isNew: false, user: user});
  } else {
    var newUser = {deviceId: deviceId, name: '匿名'};
    add(newUser).then((returnUser) => {
      resolve({isNew: true, user: returnUser});
    }).catch((err) => {
      reject(err);
    });
  }
}).catch((err) => {
  reject(err);
});
阿神
阿神

闭关修行中......

全部回复(1)
PHP中文网

then 有两个参数,一个是成功的回调,一个是错误的回调,你在错误回调中处理了错误,就不会进入最后的 catch,如:

Promise.resolve(xxx)
.then(function(result) {
   if (result) {
      throw new Error("My bad");
   } else {

   }
, function(err) {

}).then()
.then()
.catch();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号