使用异步方法返回的对象

时间:2019-07-29 21:21:09

标签: javascript google-api google-sheets-api

很遗憾,我正在尝试执行以下操作: 1.阅读电子表格,并将其作为已解析的对象。 2.使用解析的对象在其中查找特定值。例如电子邮件。

电子表格用作数据库,其动机是确定给定的电子邮件是否存在。

显然,由于我不知道如何返回异步方法,因此我误解了异步方法的使用。

调用方法:

helpers.read('the-spreadsheet-id', 'Sheet1!A:Z');

阅读方法@ helpers / sheets.js:

    exports.read = (spreadsheetId, range) => {
  const sheets = google.sheets({ version: 'v4', auth: oAuth2Client });

  return sheets.spreadsheets.values.get({
    spreadsheetId,
    range,
  })
    .then(_.property('data.values'));
};

我该怎么做才能获取json对象或类似的已解析数据对象以继续在调用方法上使用?

谢谢。

1 个答案:

答案 0 :(得分:1)

要使异步步骤起作用,您必须声明要返回Promise或函数为async。异步/等待实际上实际上是在使用诺言,但这是一种更简洁的语法。

对于Promise版本,您必须使用resolve函数返回所需的值,并使用reject函数引发错误。

exports.read = (spreadsheetId, range) => {
    return new Promise((resolve, reject) => {
        const sheets = google.sheets({ version: 'v4', auth: oAuth2Client });

        sheets.spreadsheets.values.get({
            spreadsheetId,
            range,
        })
        .then(data => {
            resolve(data.values);
        })
        .catch(err => reject(err));
    });
};

使用异步/等待时,可以将查询包装在try / catch中,如果失败则抛出错误。

exports.read = async (spreadsheetId, range) => {
    const sheets = google.sheets({ version: 'v4', auth: oAuth2Client });
    try {
        const data = await sheets.spreadsheets.values.get({
            spreadsheetId,
            range,
        })
        return data.values;
    } catch(err) {
        throw err;
    }
};

我不使用下划线,所以我不确定您要返回的内容是什么。我假设data是查询的结果,而您试图传递values

相关问题