我试图找出使用模态和http请求构造Promise逻辑的最佳实践。说我有这样的情况:
// normal logic flowing to here
// ...
// encounter special case
if (needToDoSomeGuidedPreprocessing) {
doSomeAsyncHttpCall
.then(doSomeStuff);
.then(sendUpSomeDialogThatNeedsToConfirmToProceed)
}
// ...
// if dont need guided preprocessing, continue to normal operations
// (includes more dialogs). Also, if guided preprocessing worked, make sure
// code down here doesn't fire until pre-processing is done (i.e. all these
// operations need to be done sequentially, so .all( ) wont work
如何才能让我的代码在这里可读?
我想到了这个,但想到也许有更好的方法?问题是在此之后我还有更多的异步方法/对话框,并且宁愿保留一个单一的方法而不是跳出一个全新的方法。:
// ...
// encounter special case
if (needToDoSomeGuidedPreprocessing) {
doSomeAsyncHttpCall
.then(doSomeStuff);
.then(sendUpSomeDialogThatNeedsToConfirmToProceed)
.then(callSomeCommonMethod)
}
else{
callSomeCommonMethod()
}
// ...
这只是对话/异步操作的本质还是我做错了什么?
答案 0 :(得分:1)
如果您的操作可能异步,则应始终将其视为与外界异步,即使在某些(甚至是大多数)条件下它也是同步的。
因此,要实现这一点,函数应该返回一个promise。
除此之外,.then
链接提供了您需要的顺序处理。否则,您的代码非常易读。
function doSomething(){
var promise = $q.resolve();
if (needToDoSomeGuidedPreprocessing){
promise = promise.then(doSomeAsyncHttpCall)
.then(doSomeStuff)
.then(sendUpSomeDialogThatNeedsToConfirmToProceed)
}
promise = promise.then(callSomeCommonMethod);
// etc...
return promise;
}