gpt4 book ai didi

javascript - 使用 Observable.from() 并在 Observable 中捕获错误时如何处理 `UnhandledPromiseRejectionWarning`

转载 作者:搜寻专家 更新时间:2023-10-31 23:40:40 26 4
gpt4 key购买 nike

我正在使用 redux-observableisomorphic-fetch 来处理我的 React 应用程序中的 http 请求。我更喜欢这种组合而不是使用 rxjs 的 ajax,因为我正在使用 Jest 进行测试 - 它在 Node.js 中运行测试 - 并且想要拦截使用 nock 的 http 请求。请参阅此相关问题:Use fetch instead of ajax with redux-observable .

问题来了:我得到一个 UnhandledPromiseRejectionWarning 和一个可怕的:DeprecationWarning: Unhandled promise rejections are deprecated。将来,未处理的 promise 拒绝将以非零退出代码终止 Node.js 进程。 因为我没有直接捕获我的 promise 拒绝,而是将其留给 Observable:

// apiModule.js
import fetch from 'isomorphic-fetch'

const api = {
getSomething: () => {
const request = fetch('http://some-api/')
.then(res => catchError(res)) // throwing an Error here if not response.ok
.then(res => res.json())

return Observable.from(request)
}
}

然后在史诗中:

// myReduxModule.js
import {api} from './apiModule.js'

const getSomethingEpic = action$ =>
action$
.ofType(GET_SOMETHING)
.mergeMap(action =>
api
.getSomething()
.map(response => getSomethingSucceeded(response))
.catch(error => logError(error)) // error is handled here!
)

所以 promise 拒绝是在 Observable 中处理的,但不是直接处理的!

关于如何在这种情况下避免警告(以及 future 可能以非零退出代码终止)的任何建议?

最佳答案

从现在开始,每次您有 promise 并调用then 时,您必须还实现catch。也在你的测试中。

 const request = fetch('http://some-api/')
.then(res => catchError(res))
.then(res => res.json())
.catch(err => catchError(res)) // <= here you should implement the catch

关于javascript - 使用 Observable.from(<Promise>) 并在 Observable 中捕获错误时如何处理 `UnhandledPromiseRejectionWarning`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44431291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com