我真的很困惑为什么我不能从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()
我收到了回复而不是结果。
如果我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))
}
我完全迷失了,所以如果有人能向我解释发生了什么,那将非常感激。
答案 0 :(得分:2)
amazonMws.products.search
函数是异步的,这意味着它稍后会为您提供一个值,因此,您无法获得值 now 。相反,当你收到价值时,你必须说明你想要做什么以后。
这是承诺的回报。承诺本身就是您稍后会收到的这个价值的表示。
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 await,但它可以使代码在某些情况下看起来更好一些,就好像它是同步的一样。以下是使用async等待调用上述函数的内容:
async function getProducts() {
try {
const result = await listMatchingProducts(someQuery)
// do something with result
} catch (error) {
// handle the error
}
}
而且,像往常一样,请务必查阅文档,了解您对此感到困惑的任何细节:
答案 1 :(得分:1)
function listMatchingProducts(query) {
const options = {
Version: VERSION,
Action: 'ListMatchingProducts',
MarketplaceId: MARKET_PLACE_ID,
SellerId: SELLER_ID,
Query: query
}
return amazonMws.products.search(options); //returns a promise
}
答案 2 :(得分:0)
正如其他人所指出的,Promise就像你认为的那样工作。
请参阅我对function returning too early before filter and reduce finish的回答,以便(希望)明确解释您所遇到的问题。