以下方法工作:
$q.when()
.then(checkCookieToken) // check if cookie already exists e.g. in cookie
.then(setHeader) // set Header with REST-Token e.g from cookie
.then(checkTokenOnline) // if not OK logout
.then(getMenu) // if previous OK get navigation menu
.then(getDataResource) // set ngResource
.then(getData); // and query it
Run Code Online (Sandbox Code Playgroud)
4个问题:
1)如果eg checkTokenOnline不正常,我不想执行其余的功能,我怎么能退出(退出,中断,等等......)?
2)如何设置其中一些并行,其中一些是串行的?
3)如何在它们之间传输数据?
4)如何使以下功能取决于之前的结果?
你问的是如何在promises中链接函数.
3)如何在它们之间传输数据?
4)如何根据以前的结果制作以下功能?
返回链中下一个函数的数据(或承诺):
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 chaining
return p3;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
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 chaining
return p4;
Run Code Online (Sandbox Code Playgroud)
请注意,这$q.all不具备弹性.如果任何promise会抛出错误,.then则将跳过该方法,并且只有第一个错误将转到该.catch方法.
函数式编程的经验法则总是返回一些东西.
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |