You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用async/await批量获取商品报错:XXX.then is not a function

问题分析与解决

你的问题出在map返回的是Promise数组,而不是单个Promise,数组本身没有.then()方法,所以才会报then is not a function的错误。

修正步骤

  1. 用Promise.all()包装map返回的Promise数组,它会等待所有异步请求完成后,返回一个包含所有结果的数组。
  2. 处理结果时,要注意每个结果都是单个商品请求返回的products对象,需要遍历这些对象,再提取每个对象里的products数组数据。

修正后的代码

let d = [
    "butter",
    "mais",
    "bread"
];

// 批量获取所有商品,用Promise.all等待全部完成
Promise.all(d.map(async function(f) {
    const products = await ah.product().getProductsFromName(f, {
        sort: ProductSortOptions.PriceAsc
    });
    return products;
})).then(function(allResults) {
    // allResults是一个数组,每个元素是单个商品请求返回的products对象
    const responseTitles = [];
    allResults.forEach(result => {
        // 遍历每个结果里的products数组,提取需要的字段
        result.products.forEach(product => {
            responseTitles.push({
                "title": product.title,
                "brand": product.brand
            });
        });
    });
    res.json({
        prod: responseTitles
    });
}).catch(function(err) {
    // 加错误捕获,避免应用崩溃,方便调试
    console.error('批量获取商品出错:', err);
    res.status(500).json({error: '获取商品失败'});
});

额外优化(用async/await简化)

如果你的外层函数是async的,还可以用更简洁的写法:

let d = [
    "butter",
    "mais",
    "bread"
];

try {
    const allResults = await Promise.all(d.map(async f => {
        return await ah.product().getProductsFromName(f, {
            sort: ProductSortOptions.PriceAsc
        });
    }));

    const responseTitles = allResults.flatMap(result => 
        result.products.map(product => ({
            title: product.title,
            brand: product.brand
        }))
    );

    res.json({prod: responseTitles});
} catch (err) {
    console.error('批量获取商品出错:', err);
    res.status(500).json({error: '获取商品失败'});
}

关键细节

  • map里的async函数会让每个迭代都返回一个Promise,所以得到的是Promise数组,必须用Promise.all()统一处理。
  • 加上catch块可以捕获异步错误,避免应用直接崩溃,方便你查看错误信息调试。
  • flatMap可以代替嵌套的forEach,更简洁地把二维数组转成一维,提取所有商品的title和brand。

内容的提问来源于stack exchange,提问作者I try so hard but I cry harder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:43:29