promise中的返回数组返回未定义

时间:2019-03-08 17:06:56

标签: javascript arrays node.js promise

我正在学习NodeJS来做一些自动化脚本,但是遇到了一个我不知道如何解决的问题。

我使用Google电子表格API和“ promisify-node”包,要求从电子表格中获取一些数据,并尝试返回部分数据以在另一个js文件中使用。

文件:sheets.js

const getProductsConfiguration = async(auth) => 
{
    const sheets = google.sheets('v4');
    const getValues = promisify(sheets.spreadsheets.values.get);
    await getValues({
        auth: auth,
        spreadsheetId: utils.getSpreadsheedId(config.spreadsheet.configSpreadsheedUrl),
        range: `${config.spreadsheet.configTabName}!A8:C1000`,   
    })
    .then(function (response) {
        var productsConfiguration = [];
        for(var value in response.values)
        {
            if(response.values[value].length === 0) continue;
            var productConfig = {
                "productName": response.values[value][0],
                "spreadsheetId": response.values[value][1],
                "filterId": response.values[value][2]
            };
            productsConfiguration.push(productConfig);
        }
        console.log(productsConfiguration);
        return productsConfiguration;
    })
    .catch(function (error){console.log(error); return false;});
};

app.js:

productsConfig = await spreadsheet.getProductsConfiguration(sheetAuth);
        console.log(productsConfig);

此console.log返回“未定义”,但是“ spreadsheet.js”内部的console.log返回正确的数据。

我该怎么办?谢谢

1 个答案:

答案 0 :(得分:0)

您可以只进行const values = await getValues({...})。由于在返回承诺的函数前面使用await时,promise会解析为值,因此无需在其后加上一个小数。

const getProductsConfiguration = async(auth) => {
    const sheets = google.sheets('v4');
    const getValues = promisify(sheets.spreadsheets.values.get);
    let values
    try{
        values = await getValues({
            auth: auth,
            spreadsheetId: utils.getSpreadsheedId(config.spreadsheet.configSpreadsheedUrl),
            range: `${config.spreadsheet.configTabName}!A8:C1000`,   
        })
    }catch(e){
        console.log(error)
    }

    var productsConfiguration = [];
    if(values){
        for(var value in values) {
            if(values[value].length === 0) continue;
            var productConfig = {
                "productName": values[value][0],
                "spreadsheetId": values[value][1],
                "filterId": values[value][2]
            };
            productsConfiguration.push(productConfig);
        }
    }

    console.log(productsConfiguration);
    return productsConfiguration
};

希望这会有所帮助!