gpt4 book ai didi

javascript - 如何在函数中返回 Promise 的结果

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:47 24 4
gpt4 key购买 nike

我真的很困惑为什么我无法从amazonMws.products.search()返回JSON结果并需要一些帮助来了解正在发生的事情。当我这样写时给了我 undefined :

function listMatchingProducts(query) {
const options = {
Version: VERSION,
Action: 'ListMatchingProducts',
MarketplaceId: MARKET_PLACE_ID,
SellerId: SELLER_ID,
Query: query
}

amazonMws.products.search(options, (err, res) => {
if(err){
throw(err)
return
}

return res
})
}

我还得到undefined当使用amazonMws.products.search().then().catch()时也是如此。

如果我return amazonMws.products.search()我得到的是 promise 而不是结果。

在回调内部,如果我 console.log(res)我得到了我期望的 JSON 结果。所以这让我相信我需要使用 async await我想,但这会导致 Promise { <pending> } :

async function listMatchingProducts(query) {
const options = {
Version: VERSION,
Action: 'ListMatchingProducts',
MarketplaceId: MARKET_PLACE_ID,
SellerId: SELLER_ID,
Query: query
}

return await amazonMws.products.search(options)
.then(res => {
return res
})
.catch(e => errorHandler(e))
}

我完全迷失了,所以如果有人能向我解释发生了什么事,我将不胜感激。

最佳答案

amazonMws.products.search 函数是异步的,这意味着它稍后会为您提供一个值,因此,您现在无法获取该值。相反,当您收到该值时,您必须稍后说出您想要执行的操作。

这就是返回 promise 的作用。 Promise 本身就是您稍后将收到的这个值的表示。

function listMatchingProducts(query) {
const options = {
Version: VERSION,
Action: 'ListMatchingProducts',
MarketplaceId: MARKET_PLACE_ID,
SellerId: SELLER_ID,
Query: query
}

return amazonMws.products.search(options)
}

然后,在调用该函数时,将处理程序附加到 Promise。

listMatchingProducts(someQuery)
.then(result => {/* do something with result */})
.catch(error => {/* handle the error */})

而且,虽然您不需要在这里使用 async wait,但它可以使代码在某些情况下看起来更好一些,就好像它是同步的一样。下面是使用 async wait 调用上述函数的样子:

async function getProducts() {
try {
const result = await listMatchingProducts(someQuery)
// do something with result
} catch (error) {
// handle the error
}
}

并且,像往常一样,请始终查阅文档以了解您感到困惑的任何细节:

关于javascript - 如何在函数中返回 Promise 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342695/

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