Angular8 / typescript-是否有更好的方法在.then()中而不是空对象块中返回Promise <void>

mv_05:

我试图查看在返回Promise时是否在.then()中返回空块是正确的模式。

下面是方法以及如何在.then()中返回代码。这段代码有效,但是想知道更好的方法。即使是tslint也在对此进行编译。

private async somexMethod(id: string, params?: someParams): Promise<void> {
    const url: string = "http://someendpointUri";
    const headers = await getMyHeadersAsync(id);

    // Here calling my API that returns the promise
    return this._myHttpClient.delete(url, { headers, params: someParams })
        .pipe(retryWhen(HttpUtil.someXPolicyForRetry))
        .toPromise() // this converts Observable<ResponseXyz> to Promise<ResponseXyz>

        // tslint:disable-next-line: no-empty
        .then(() => { }) // Is this the correct way to return for Promise<void> or .then(() => null) ?
        .catch(() => {
            // log error msg
        });
}

这里的Observable由delete方法以及此函数HttpUtil.someXPolicyForRetry返回。使用toPromise()转换为Promise后,如何返回Promise?

上面用空块调用.then()是使用的正确模式还是还有其他更好的方法?我也看到.then(()=> null)作为另一个选项,但是不确定我们是否还有其他更好的方法返回Promise。

请注意,我想在codesnippet方法中保持相同的模式,例如返回this._myHttpClient.delete(..),并且我不想将其更改为其他返回新Promise(resolve,拒绝)或调用resolve()的模式。

哈罗德·波吉(Harold Pogi):

即使您没有明确返回承诺,异步函数也始终会返回承诺。

然后在代码中,只要您不返回任何内容,就总是希望 Promise<void>

private async somexMethod(id: string, params?: someParams): Promise<void> {
    const url: string = "http://someendpointUri";
    const headers = await getMyHeadersAsync(id);


    this._myHttpClient.delete(url, { headers, params: someParams }) // removed the return
        .pipe(retryWhen(HttpUtil.someXPolicyForRetry))
        .toPromise() // this converts Observable<ResponseXyz> to Promise<ResponseXyz>

        //.then(() => { }) // no need for this
        .catch(() => {
            // log error msg
        });
}

这是4分钟的有关异步等待的内容:https : //medium.com/better-programming/should-i-use-promises-or-async-await-126ab5c98789

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular8/TypeScript:map.set() 不是函数

TypeScript和void Q Promise

Typescript异步函数返回类型void vs Promise <void>

如何确定屏幕上是否显示了动态组件并在Angular8中访问其属性

angular8的dist文件夹中没有index.html

如何在 Angular8 中创建具有匿名函数的类

如何在 Angular8 中检查字符串是否是浮点数/整数而不是 NaN?

在Angular8中检测多个ajax请求状态的最佳专业方法是什么?

如何在Java8中为void(不是Void)方法指定函数类型?

是否有更好的方法来检查在Java中8这种状况呢?

如何使用angular8中的tileLoaded?

是否有更好的方法将值推送到表单控件,并将数组作为 Angular 中的值

Angular8 对象未定义?

将 Typescript 装饰器限制为 void 或 Promise<void> 函数

是否有更好的方法在Android中显示%

在TypeScript void函数中更改传递对象的类型

什么时候在方法中返回“ this”而不是“ void”,为什么?

Python中是否有等价的`(void)foo`?

如何在angular8 js中在没有jQuery依赖的情况下支持IE8和IE9中的占位符属性?

遍历模板中的接口时出错-Angular8

如何从数组中过滤数据并应用条件angular8

如何在Angular8中制作通用请求服务

如何在jspdf angular8中显示嵌套的Json

选择标签不显示 angular8 中的默认选项

如何从 angular8 的 Oninit 会话中获取价值?

如何在angular8中导入请求选项

找不到模块错误:在Angular8中无法解析“ ./”

Jersey RS:是否在void GET方法中包含对象/ JSON?

以多个列表作为参数而不是在dict中返回它们,是否有更好的方法(python3)?