javascript – Promisifying Sheet API v4导致未定义

如果我使用回调,下面使用Google的Sheets API v4的代码可以正常工作.

但是,我正在尝试将util.promisify应用于API调用.这导致:

Cannot read property 'getRoot' of undefined

抛出的是:

node_modules\googleapis\build\src\apis\sheets\v4.js:592

这行592说:context:this.getRoot()

我可能没有正确使用promisify,我希望有人可以帮助我.

我怀疑它可能与并发性有关.

任何提示将不胜感激.

let {
  promisify
} = require('util');
let {
  google
} = require('googleapis');
let sheets = google.sheets('v4');
let credentials = require('./credentials.json')

let client = new google.auth.JWT(
  credentials.client_email, null, credentials.private_key, ['https://www.googleapis.com/auth/spreadsheets'])
client.authorize((err, tokens) => {
  if (err) {
    throw err;
  }
});

let endpoint = promisify(sheets.spreadsheets.values.get);

async function test() {

  let request = {
    auth: client,
    spreadsheetId: "xxxxxxxx",
    range: "'ExampleSheet'!A:B",
    valueRenderOption: "UNFORMATTED_VALUE",
    majorDimension: "ROWS",
  }

  let result = await endpoint(request)
    .then((res) => {
      return res
    })
    .catch((err) => {
      console.log(err);
    });
}

test();

最佳答案 好的,经过一些挖掘,我得到了它的工作.

我修改了我的原始代码以使用以下内容:

let endpoint = promisify(api.spreadsheets.get.bind(api));

不知道为什么api首先没有绑定到这个/上下文.

点赞