CNode

nodejs 中 promise 模块 流程控制问题

问答
LLastKing发布于11 年前最后回复11 年前6 回复7319 浏览0 收藏

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); });

查看回复

回复 (6)

Y
yakczh#1·11 年前

如果其中一个步骤的代码里面有多层分支该怎么写?

L
LastKing#2·11 年前
引用 yakczh如果其中一个步骤的代码里面有多层分支该怎么写?

@yakczh 最后那一个。。就是。。但是我觉的 这个代码 很诡异 。

R
reverland#3·11 年前

流程控制。。。参照另一个帖子的async/await?

C
chrischjh#4·11 年前

如果流程有分支的话估计只能嵌套promise了: Promise.resolve(xx) .then(function(result) { if (result) { return result; } else { return Promise.resolve(xxx) .then() .then(); } }) .catch();

C
chrischjh#5·11 年前

在async/await普及之前,用generator来控制应该是最简单的方法,完全用同步代码的形式写,就是用 co来包裹一下跑就行了

参与回复
登录后即可参与回复。登录