您在问如何在promise中 链接 功能。
3)如何在它们之间传输数据?
4)如何使以下功能取决于其先前的结果?
返回 链中 下一个函数的数据(或promise):
var p2 = p1.then ( function (data) { var nextData = someFn(data); return nextData;});var p3 = p2.then ( function (nextData) { var nextData2 = someOtherFn(nextData); return nextData2;});//return for further chainingreturn p3;1)如果例如checkTokenOnline不能正常运行,我不想执行其余功能,那么如何在这一点上退出(退出,中断等)。
要 拒绝 承诺,请让您的函数 抛出 错误。链将跳过所有
.then方法,直到您提供错误处理程序。
var p2 = p1.then ( function checkTokenonline (response) { if ( isBadFn(response) { throw error; } else { return nextData; } }) .then ( someFn ) .then ( someOtherFn ) .catch ( function (error) { // someFn and someOtherFn skipped //log error throw error; }); //return for further chaining return p2;2)我如何设置其中一些并行,其中一些串行?
要使两个功能并行运行,请做出两个承诺。使用
$q.all等待他们俩来完成。
var p1 = $q.when ( fn1() );var p2 = $q.when ( fn2() );var p3 = $q.all ( [p1, p2] );var p4 = p3.then ( function (responseList) { var response1 = responseList[0]; var response2 = responseList[1]; return something;}). catch ( function (error) { //log error throw error;});//return for further chainingreturn p4;请注意,这
$q.all没有 弹性 。如果任何承诺引发错误,
.then则将跳过该方法,并且仅第一个错误将进入该
.catch方法。
函数式编程的经验法则 总是返回一些东西 。
有用的链接
- AngularJS $ q参考-链接诺言
- 您错过了承诺的重点。
- Ninja Squad-有关AngularJS承诺的陷阱,反模式和提示



