待处理的承诺后,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种方法是update
和downloadFile
,我认为这是我的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种方法是update
和downloadFile
,我认为这是我的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());
功能>
您应该这样做