最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

待处理的承诺后,JSON输入错误意外结束

IT培训 admin 6浏览 0评论

待处理的承诺后,JSON输入错误意外结束

我正在创建数据处理程序,在此过程中,我需要下载一个文件,然后作为处理程序的一部分进行解析和使用。

我将对文件的请求包装在一个Promise中,并从其他方法中异步调用该方法

我从另一个测试文件中包含了处理程序,如下所示:>

let DataHandler = require('./handler');

const handler = new DataHandler();

console.log(handler.getSupervisors());

getSupervisors方法如下

async getSupervisors() {
    const parsed = await this.loadFile();
    let supervisorList = [];

    parsed.controllers.map(controller => {
        if (controller.rating === 11 || controller.rating === 12){
            supervisorList.push(controller);
        }
    });

    return supervisorList;
}

这将调用loadFile方法,该方法仅调用update方法并在返回所需的json文件之前。接下来的2种方法是updatedownloadFile,我认为这是我的2个问题,它们如下

async update() {    
    let body = await this.downloadFile();
    const parsedJSON = JSON.parse(body);

    parsedJSON.updated_date = new Date();
    const json = JSON.stringify(parsedJSON);
    fs.writeFile('vatsimData.json', json, function(err, result) {
        if(err) console.log(err);
    });
}

downloadFile() {
    return new Promise((resolve, reject) => {
        const urlList = [
            '.json',
            '.json',
            '.json'
        ];
        const url = urlList[Math.floor(Math.random()*urlList.length)];
        request(url, (error, response, body) => {
            if (error) reject(error);

            if (response.statusCode !== 200) {
                reject('Invalid status code <' + response.statusCode + '>');
            }

            resolve(body);
        });
    });
}

getSupervisors方法的输出应该是json文件中所有“监督者”的数组,而是返回Promise { <pending> }和此错误

(node:3160) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at DataHandler.loadFile (D:\Projects\VATSIM-Data-Handler\handler.js:57:15)
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:3160) 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(). (rejection id: 1)
(node:3160) [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.

[我尝试在调用update之后将整个.then方法放入downloadFile回调中,但没有用

我正在创建一个数据处理程序,在此过程中,我需要下载一个文件,然后作为处理程序的一部分进行解析和使用。我已经将对文件的请求包装在一个Promise中...

回答如下:

得到承诺的原因是,当您await时您没有async使用console.log(handler.getSupervisors());功能>

您应该这样做

待处理的承诺后,JSON输入错误意外结束

我正在创建数据处理程序,在此过程中,我需要下载一个文件,然后作为处理程序的一部分进行解析和使用。

我将对文件的请求包装在一个Promise中,并从其他方法中异步调用该方法

我从另一个测试文件中包含了处理程序,如下所示:>

let DataHandler = require('./handler');

const handler = new DataHandler();

console.log(handler.getSupervisors());

getSupervisors方法如下

async getSupervisors() {
    const parsed = await this.loadFile();
    let supervisorList = [];

    parsed.controllers.map(controller => {
        if (controller.rating === 11 || controller.rating === 12){
            supervisorList.push(controller);
        }
    });

    return supervisorList;
}

这将调用loadFile方法,该方法仅调用update方法并在返回所需的json文件之前。接下来的2种方法是updatedownloadFile,我认为这是我的2个问题,它们如下

async update() {    
    let body = await this.downloadFile();
    const parsedJSON = JSON.parse(body);

    parsedJSON.updated_date = new Date();
    const json = JSON.stringify(parsedJSON);
    fs.writeFile('vatsimData.json', json, function(err, result) {
        if(err) console.log(err);
    });
}

downloadFile() {
    return new Promise((resolve, reject) => {
        const urlList = [
            '.json',
            '.json',
            '.json'
        ];
        const url = urlList[Math.floor(Math.random()*urlList.length)];
        request(url, (error, response, body) => {
            if (error) reject(error);

            if (response.statusCode !== 200) {
                reject('Invalid status code <' + response.statusCode + '>');
            }

            resolve(body);
        });
    });
}

getSupervisors方法的输出应该是json文件中所有“监督者”的数组,而是返回Promise { <pending> }和此错误

(node:3160) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at DataHandler.loadFile (D:\Projects\VATSIM-Data-Handler\handler.js:57:15)
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:3160) 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(). (rejection id: 1)
(node:3160) [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.

[我尝试在调用update之后将整个.then方法放入downloadFile回调中,但没有用

我正在创建一个数据处理程序,在此过程中,我需要下载一个文件,然后作为处理程序的一部分进行解析和使用。我已经将对文件的请求包装在一个Promise中...

回答如下:

得到承诺的原因是,当您await时您没有async使用console.log(handler.getSupervisors());功能>

您应该这样做

发布评论

评论列表 (0)

  1. 暂无评论