我正在React应用程序中使用基于承诺的挂钩来从API提取异步数据。
我还使用基于承诺的http客户端Axios来调用API。
在另一个promise中使用基于promise的客户端是否是反模式?以下代码似乎无效。
ContentType
哦,天哪。我认为您对Promises的运作方式有根本的误解。
首先,axios默认已经返回了Promise
。因此,getData
的整个第一个功能可以简化为:
const getData = () => {
const url = "/getData"
return axios.get(url)
}
但是代码的本质似乎表明您想要一个可质疑的Promise-因此无论出于何种原因,您都可以检查其状态。以下是根据this snippet改编而成的示例:
function statusPromiseMaker(promise) {
if (promise.isResolved) return promise
let status = {
pending: true,rejected: false,fulfilled: false
}
let result = promise.then(
resolvedValue => {
status.fulfilled = true
return resolvedValue
},rejectedError => {
status.rejected = true
throw rejectedError
}
)
.finally(() => {
status.pending = false
})
result.status = () => status
return result
}
通过这种方式,您可以执行类似let thing = statusPromiseMaker(getData())
的操作,如果您查找thing.status.pending
,则会得到true
或false
等...
我实际上并没有执行上面的操作,我可能忘记了一两个括号,但是希望这会有所帮助。
我必须承认-我还没有见过像在野外使用过的东西。我很想知道您实际上是想以此完成什么。