问个Promise问题
发布于 9 年前 作者 im-here 4788 次预览 最后一次回复是 9 年前 来自 问答
用的是bluebird
function main() {
return f1().then(val=>{
if(val===null)
return null;//我想要的是如果这里得到的值为null,那么就中断整个链,并把这个结果返回,否则继续后面的操作
else
return 100;
}).then(val=>{
//继续后面操作
});
};
12 回复
reject or throw an error
@zzhcch 这样确实可以中断,但是这样就是error了,我并不想要error。
取决于你后面的操作是什么,如果是同步操作则没必要继续then了,如下:
如果后面的操作也是异步promise链条,则可以嵌套到else里面:
为什么不试试co+generator+promise呢
其实你这种Promise调用链中间中断的,我觉得使用generator函数去写,最容易理解,并且符合常规的理解~
@tiant167 这样好像可行。不过跑到catch里了 总个人感觉是捕捉到错误了。
@chrischjh 后面是异步操作,我现在就是这样嵌套的
@hyj1991 关键是老项目,用的node版本还是0.x的版本。。。
@imhered 没事吧,对外面调用的 function 来说是无感知的
@tiant167 但是如果该函数体里面真的 throw error 的话,就catch不到了。
@imhered catch 可以区分 error,比如 null 这里的 reject 可以用 AssertionError。可以看下 bluebird catch 的文档 http://bluebirdjs.com/docs/api/catch.html
@tiant167 好的,谢谢!