为什么不执行$ q.when()而不传递promise / value?

时间:2014-09-03 15:34:38

标签: javascript angularjs promise q

根据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;
});
}

2 个答案:

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