根据the Angular docs on $q,$ q.when()需要传入promise /值。
但是我只是遇到了别人的代码而没有传递任何参数。这是我看到的简化版本:
var modal = false;
if (modalOpen) {
return $q.when()
}
modalOpen = true;
modal = newModal({
template: opts.template,
});
modal.result.finally(function(){
modalOpen = false;
});
}
答案 0 :(得分:7)
方法应该同步返回或异步返回以保持一致。如果某个方法有时会同步返回并且仍然希望保留该事实,有时它已经被解析为透明 - 它返回一个空的已解析的promise。拥有有时返回承诺且有时同步的API是recipe for trouble。
使用$q.when
是在Angular中获得空解析的承诺的最简单方法。
答案 1 :(得分:0)
如果您想知道$q.when()
返回是什么-它返回 undefined
。
如果您需要返回null
,请执行$q.when(null)
。
当您拥有TypeScript之类的类型系统,并且在无法使用请求的类型来解析promise时,需要知道该方法的返回类型时,这很有用。
const getUser = async (id: number): Promise<User | undefined> =>
someCondition ? Api.getUser(id) : $q.when();