网站搜索

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();