Возвращаемый массив внутри обещания возвращает неопределенный - PullRequest
0 голосов
/ 08 марта 2019

Я немного изучаю NodeJS, чтобы делать некоторые сценарии автоматизации, но у меня возникла проблема, которую я не знаю, как решить.

Использование API электронных таблиц Google и пакета "promisify-node"Я запрашиваю некоторые данные из электронной таблицы и пытаюсь вернуть часть данных, которые будут использоваться в другом файле js.

file: spreadsheet.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 возвращает «undefined», но console.log внутри «spreadsheet.js» возвращает правильные данные.

Что можетЯ делаю, чтобы решить?спасибо

1 Ответ

0 голосов
/ 08 марта 2019

Вы можете просто сделать const values = await getValues({...}). Нет необходимости ставить затем после него, поскольку обещание разрешается до значений, когда вы используете await перед функцией, которая возвращает обещание.

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
};

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...