【问题标题】:Adding a row to a google spreadsheet using google-spreadsheet node module and returning the status使用 google-spreadsheet 节点模块向 google 电子表格添加一行并返回状态
【发布时间】:2019-08-11 20:39:13
【问题描述】:

我能够使用 google-spreadsheet 节点模块成功地将一行添加到 google 电子表格,如下所示:

const logToGoogleSpreadsheet = (userName, description, link) => {
  const spreadsheetId = 'my-spreadsheet-id'
  const doc = new GoogleSpreadsheet(`${spreadsheetId}`)
  const clientEmail = 'my-client-email'
  const privateKey = 'my-private-key'
  const payload = {
    client_email: clientEmail,
    private_key: privateKey
  }
  let status = ''
  doc.useServiceAccountAuth(payload, function (err) {
    doc.addRow(1, { 'Reported By': userName, 'Description': description, 'Screenshot Link': link,  'Status': 'Open' }, function(err) {
      if(err) {

        console.log(err);
        status = 'some error'
      } else {
        console.log('It worked')
        status = 'success'
      }
    }); 
  })
  return status
}

const result = logToGoogleSpreadsheet('username', 'description', 'link')
console.log(`The value of result is ${result}`) //This always shows undefined as the value

结果的值总是'undefined'。我知道这是由于 javascript 的异步特性并且无法修改回调函数中的任何内容,但我无法解决此问题。有人可以告诉我如何从 logToGoogleSpreadsheet 函数返回状态的示例吗?

谢谢

【问题讨论】:

    标签: javascript node.js callback google-sheets-api


    【解决方案1】:

    你可以这样做:

    const logToGoogleSpreadsheet = *async* (userName, description, link) => {//add async keyword
      const spreadsheetId = 'my-spreadsheet-id'
      const doc = new GoogleSpreadsheet(`${spreadsheetId}`)
      const clientEmail = 'my-client-email'
      const privateKey = 'my-private-key'
      const payload = {
        client_email: clientEmail,
        private_key: privateKey
      }
      let status = ''
      doc.useServiceAccountAuth(payload, function (err) {
        doc.addRow(1, { 'Reported By': userName, 'Description': description, 'Screenshot Link': link,  'Status': 'Open' }, function(err) {
          if(err) {
    
            console.log(err);
            status = 'some error'
          } else {
            console.log('It worked')
            status = 'success'
          }
        }); 
      })
      return status
    }
    
    logToGoogleSpreadsheet('username', 'description', 'link').then(res => console.log(res));
    

    async 关键字添加到logToGoogleSpreadsheet 将使它返回一个Promise。现在它是一个“thenable”,这意味着可以使用解析结果调用 then 方法,这就是您的状态。所以在then 调用中我们记录它。

    【讨论】:

      猜你喜欢
      • 2018-06-17
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      相关资源
      最近更新 更多