了解异步功能->第二个功能即将运行

问题描述

我进行API调用获取第二个功能所需的令牌。但是这一步很快就会结束,所以没有数据。 (我得到一个错误,指出json意外结束)。在此之后,我打了4次矿石。我在Google Apps脚本中创建了此脚本,但Hole脚本大约需要17分钟。因此,我想在NodeJS中创建它并部署在firebase上,然后为apps脚本创建一个端点以获取已经存在的数据。

第一功能

const express = require('express');
const app = express();
const fetch = require('node-fetch'); 
const resid = require('./calls.js');


/*
Here we start with the request to get a new token. And pass this on in the request's later on.
*/
async function getToken() {

    const config = {
        method: 'post',headers: {}
    };

    const url = 'https://theapirurl.com';

    const response = await fetch(url,config);
    const json = await response.json();
    const token = json['access_token'];

    await resid.getReservationIds(token);

}

getToken()

第二个功能(在calls.js上)

const fetch = require('node-fetch'); 

async function getReservationIds(token) {

    const url = "https://theapiurl.com";
    const config = {
        
        method: "get",muteHttpExceptions: true,headers: {
            "Authorization": "bearer" + token
        }
    };

    const respone = await fetch(url,config);
    const json = await respone.json();

    //console.log(json);

}

module.exports = {
    resid: getReservationIds()
}

我在做什么错了?

编辑

现在我收到此错误

(node:43371) UnhandledPromiseRejectionWarning: FetchError: invalid json response body at https://apiurlfromcallsjs.com reason: Unexpected end of JSON input
    at /Users/remco/functions/node_modules/node-fetch/lib/index.js:272:32
    at processticksAndRejections (internal/process/task_queues.js:97:5)
    at async getReservationIds (/Users/remco/functions/calls.js:20:18)
(node:43371) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block,or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection,use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:43371) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future,promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:43371) UnhandledPromiseRejectionWarning: TypeError: getReservationIds is not a function
    at getToken (/Users/remco/functions/index.js:23:11)
    at processticksAndRejections (internal/process/task_queues.js:97:5)
(node:43371) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block,use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 3)

解决方法

您要立即调用第二个功能,而不是等待第一个功能完成:

module.exports = {
    resid: getReservationIds()
}

所以当你跑步

const resid = require('./calls.js');

这时,第二个功能已经在运行中(resid.getReservationIds是Promise,而不是功能)。

仅导出函数:

module.exports = getReservationIds;

然后导入并调用它:

const getReservationIds = require('./calls.js');
// ...
  await getReservationIds(token);