javascript - 为什么你会在不传递 promise/值的情况下执行 $q.when()?
根据 Angular 文档关于 $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;
});
}
答案#1
方法应该要么同步返回,要么异步返回,以保持一致性。如果一个方法有时是同步返回,同时又希望透明地保留有时已解析完成的事实——它会返回一个已解析的空 Promise。具有有时返回 Promise、有时同步返回的 API 是麻烦的根源。
在 Angular 中,使用 $q.when 是获取一个已解决的空承诺的最简单方法。
答案#2
如果你想知道 $q.when() 返回 什么——它返回 undefined。
如果你需要它返回 null,那么就使用 $q.when(null)。
当你有像 TypeScript 这样的类型系统,并且需要知道方法的返回类型时,而你又无法以请求的类型解析 promise,这会很有用。
const getUser = async (id: number): Promise<User | undefined> =>
someCondition ? Api.getUser(id) : $q.when();
