【问题标题】:Angular8/typescript - Is there a better way to return Promise<void> within .then() instead of an empty object blockAngular8/typescript - 有没有更好的方法在 .then() 中返回 Promise<void> 而不是空对象块
【发布时间】:2020-05-15 00:02:57
【问题描述】:

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

下面是方法以及我如何在 .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。

请注意,我想在 coden-p 方法中保持相同的模式,例如 return this._myHttpClient.delete(..) 并且我不想将其更改为其他一些 return new Promise(resolve, reject) 或调用解决()。

【问题讨论】:

    标签: typescript angular8


    【解决方案1】:

    即使你没有明确地返回一个 Promise,异步函数也总是返回一个 Promise。

    那么在你的代码中,只要你不返回任何东西,它总是期望是Promise&lt;void&gt;

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

    这是关于 async-await 的 4 分钟阅读:https://medium.com/better-programming/should-i-use-promises-or-async-await-126ab5c98789

    【讨论】:

    • 感谢您的帮助!是的,它起作用了,嗯,错过了基础知识。也感谢您的链接!
    猜你喜欢
    • 2021-03-17
    • 2018-11-03
    • 2017-10-31
    • 1970-01-01
    • 2018-07-07
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多