编写期望 Promise 但如果不满足条件则不返回任何内容的打字稿方法的正确方法是啥?

Posted

技术标签:

【中文标题】编写期望 Promise 但如果不满足条件则不返回任何内容的打字稿方法的正确方法是啥?【英文标题】:What is the correct way to write a typescript method that expects a Promise but can return nothing if conditions aren't met?编写期望 Promise 但如果不满足条件则不返回任何内容的打字稿方法的正确方法是什么? 【发布时间】:2014-06-25 00:16:37 【问题描述】:

好吧,假设我有一个方法如下:

getSomethingImportant() : ng.IPromise<any> 
    if (!conditionsMet)  return; 
    return someApi.thatReturns.aPromise().then((response) => 
        // Normal stuff here
    );

Typescript 会发出警告,因为 return 没有返回任何内容,但那是因为如果不满足条件(缺少参数或已经运行或其他),我希望它不运行。

我应该创建一个承诺并立即返回吗?

我应该忽略错误吗?

改变返回类型?

【问题讨论】:

从 API 设计的角度来看,总是返回一个承诺可能会更好。 @FelixKling 那么返回的最佳对象是什么?失败?我可以抛出一个错误,但随后会有一些东西必须调用它并等待,或者它可能会“未处理”并可能破坏一切。 您还可以考虑该错误是否属于异常性质,您可以throw new Error("Think of the conditions!"); 而不是返回rejected 承诺。 【参考方案1】:

您可以创建一个null-resolved 承诺并立即返回:

if (!conditionsMet) 
    return $q.when(null); 

或者你将不满足条件的情况感知为错误,你可以返回一个被拒绝的promise:

if (!conditionsMet) 
    return $q.reject(new Error('Conditions have not been met...')); 

【讨论】:

return $q.reject(new Error('条件尚未满足...')); - 很好,谢谢!如果直接调用,它可以让我将错误传回而不杀死【参考方案2】:

返回 Promise 的函数不能返回任何东西,也不能抛出异常。如果你想返回一些东西,返回一个用你想返回的值解析的承诺,如果你想抛出一些东西,返回一个拒绝你想抛出的错误的承诺。

否则你会让这个函数非常难用。

【讨论】:

以上是关于编写期望 Promise 但如果不满足条件则不返回任何内容的打字稿方法的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如果条件满足,则递减数组并打印一个值

目标 c - 运行代码块 X 秒,但如果条件满足则立即返回

如果不满足条件,我可以为 Axios Get Method 编写 if/else 语句吗?

如果给定条件为假,如何编写注释/方面以不输入方法但返回 null?

Promise笔记

Sails js findOne()返回结果,尽管不满足所有条件