【问题标题】:async await , nodejs readfile and then do otherasync await , nodejs readfile 然后做其他
【发布时间】:2021-10-05 09:15:57
【问题描述】:

我尝试通过 async/await 读取文件并更新凭据,但我先得到响应 HI,然后在控制台中得到 hello。并且凭据也未在 oauthClient2 中更新。

  const getFile = async (req, res, next) => {
    
      await fs.readFile(TOKEN_PATH, (err, token) => {
        if (err) return null;
        console.log("hello")
        console.log(JSON.parse(token));
        oauth2Client.credentials = JSON.parse(token);
      });
      
      console.log("HI")
        var service = google.drive({
          version: 'v3', 
          encoding: null
        });
        console.log(oauth2Client);
        await service.files.get({
          auth: oauth2Client,
          fileId: "1ZR8kkvb2JYVxcUjmlgfBJD2IYnisaiFn",
          alt: 'media'
        }, function(err, response) {
          if (err) {
            console.log('The API returned an error: ' + err);
            return;
          }
          responder(res)(null,response);
        });
      
    }

有没有一种方法可以让一切都按顺序运行? 谢谢。

【问题讨论】:

    标签: google-api google-drive-api


    【解决方案1】:

    您遇到错误的原因是您正在运行的方法是异步的。您应该改用替代同步版本:

    let token;
    try {
      token = fs.readFileSync(TOKEN_PATH, 'utf8');
    } catch (err) {
      console.error(err)
    }
    if(!token){ return; }
    
    oauth2Client.credentials = token;
    const service = google.drive({
      version: 'v3', 
      encoding: null
    });
    
    await service.files.get({
      auth: oauth2Client,
      fileId: "1ZR8kkvb2JYVxcUjmlgfBJD2IYnisaiFn",
      alt: 'media'
    }, function(err, response) {
      if (err) {
        console.log('The API returned an error: ' + err);
        return;
      }
      responder(res)(null,response);
    });
    

    参考:https://nodejs.dev/learn/reading-files-with-nodejs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-06
      • 2021-06-15
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2018-10-13
      • 2016-10-15
      相关资源
      最近更新 更多