如何在函数中返回Promise结果?amazonMws调用返回undefined求助
解决Amazon MWS products.search返回undefined的问题
嘿,我一眼就看出你遇到的问题了——这是典型的异步回调陷阱!你的listMatchingProducts函数之所以返回undefined,核心原因是你误解了异步代码的执行逻辑。
为什么原来的代码不行?
amazonMws.products.search是一个异步操作(它需要发送网络请求到Amazon服务器),当你调用它的时候,JavaScript不会等着它执行完再继续,而是直接跑完listMatchingProducts的剩余代码,然后返回undefined。而你在回调里写的return res,只是从回调函数里返回,根本不会把结果传递到外部的listMatchingProducts函数中。
两种可行的解决方案
方案1:改用Promise + async/await(推荐,代码更清晰)
把你的函数改成返回一个Promise,这样就能用现代的异步语法来处理结果:
function listMatchingProducts(query) { // 返回一个Promise对象 return new Promise((resolve, reject) => { const options = { Version: VERSION, Action: 'ListMatchingProducts', MarketplaceId: MARKET_PLACE_ID, SellerId: SELLER_ID, Query: query } amazonMws.products.search(options, (err, res) => { if(err){ // 出错时reject错误 reject(err); return; } // 成功时resolve结果 resolve(res); }) }); } // 调用示例(必须在async函数里使用await) async function fetchProducts() { try { const productResults = await listMatchingProducts("你的查询关键词"); console.log("拿到的产品数据:", productResults); // 这里可以处理返回的JSON结果了 } catch (error) { console.error("请求出错:", error); } } // 执行调用 fetchProducts();
方案2:给函数添加回调参数
如果你习惯传统的回调写法,也可以让调用者传入一个回调函数来处理结果:
function listMatchingProducts(query, callback) { const options = { Version: VERSION, Action: 'ListMatchingProducts', MarketplaceId: MARKET_PLACE_ID, SellerId: SELLER_ID, Query: query } amazonMws.products.search(options, (err, res) => { if(err){ // 把错误传给回调 callback(err, null); return } // 把结果传给回调 callback(null, res); }) } // 调用示例 listMatchingProducts("你的查询关键词", (error, productResults) => { if (error) { console.error("请求失败:", error); return; } console.log("产品数据:", productResults); // 在这里处理返回的JSON });
只要选其中一种方案修改,你就能正常拿到amazonMws.products.search返回的JSON结果了!
内容的提问来源于stack exchange,提问作者Dustin
相关产品推荐
相关产品推荐

