gpt4 book ai didi

javascript - 如何解决 Node.js UnhandledPromiseRejectionWarning : Unhandled promise rejection: TypeError: Only absolute URLs are supported?

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:55 25 4
gpt4 key购买 nike

我尝试使用 Node.js 运行此代码,但总是遇到相同的错误:

(node:9092) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Only absolute URLs are supported
(node:9092) [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.

我尝试了很多方法,例如粘贴整个路径或删除所有内容,但我不知道我的错误是什么。如果我删除 d3.csv(..) 方法或 csvWriter 或两者一起删除,这并不重要。我在使用和不使用 then/catch 或 Promise 的情况下对其进行了测试,但没有任何变化。我尝试仅使用 console.log("test"); 运行一个简单的代码,这可以工作,所以 Node.js 不会工作。这是我的代码:

const fs = require('fs');
const d3 = require('d3');
global.fetch = require("node-fetch");

new Promise((resolve, reject) => {
d3.csv(".\\dat\\Meteorite_Landings.csv")}).then(function(data) {

//parse strings to numbers
data.forEach(function(d) {
var date;
if (d.year){
date = new Date (d.year);}
else{
date = null;
}
d["mass (g)"] = +d["mass (g)"];
d.reclat = +d.reclat;
d.reclong = +d.reclong;
d.date = date;
d.year = date? date.getYear() +1900 : null;
})
.catch((error) => {
assert.isNotOk(error);
});
console.log(data[0]);

createTimeLineData(data);
//createThemeRiver(data);
});

function filterYear(data){
/** Eliminate data without year */
filteredData = [];
data.forEach(function(item){
if(item.year){
filteredData.push(item);
}
});
return filteredData;
}

function getAllYears(data){
var yearArray=[];
data.forEach((item)=>{
/** creates array of all given years */
if(0 > yearArray.indexOf(item.year)){
yearArray.push(item.year);
}
});
return yearArray;
}

function createTimeLineData(rawData){
var data = filterYear(rawData);
var yearArray = (getAllYears(data)).sort();

csvWriter(yearArray);
}

function csvWriter(data){
const createCsvWriter = require("csv-writer").createObjectCsvWriter;
const csvWriter = createCsvWriter({path: 'trData.csv'});

new Promise((resolve, reject) => {
csvWriter.writeRecords(data)}).then(()=> console.log("success"))
.catch((error) => {
assert.isNotOk(error);
});
}

有人知道我做错了什么吗?

最佳答案

您的代码似乎没有以预期的方式使用 Promise。 Promise 应该用于包装异步操作,并且应该调用 resolve()reject() (这决定了它是否进入调用该 Promise 的 then()catch() block )。

使用异步代码时的一些最佳实践是始终返回函数期望的值(即使是当它们是 Promise 时!),并减少 catch block 的数量,以避免 Promise 错误在 Promise 链中被默默吞没。

考虑到这一点,请更改您的代码,如下所示:

const fs = require('fs');
const d3 = require('d3');
global.fetch = require("node-fetch");

d3.csv(".\\dat\\Meteorite_Landings.csv")
.then(function(data) {
//parse strings to numbers
data.forEach(function(d) {
var date;
if (d.year){
date = new Date (d.year);}
else{
date = null;
}
d["mass (g)"] = +d["mass (g)"];
d.reclat = +d.reclat;
d.reclong = +d.reclong;
d.date = date;
d.year = date? date.getYear() +1900 : null;
});
return data;
}).then((data) => {
return createTimeLineData(data);
}).then(() => console.log("success"))
.catch((error) => {
assert.isNotOk(error);
});

function filterYear(data){
/** Eliminate data without year */
filteredData = [];
data.forEach(function(item){
if(item.year){
filteredData.push(item);
}
});
return filteredData;
}

function getAllYears(data){
var yearArray=[];
data.forEach((item)=>{
/** creates array of all given years */
if(0 > yearArray.indexOf(item.year)){
yearArray.push(item.year);
}
});
return yearArray;
}

function createTimeLineData(rawData){
var data = filterYear(rawData);
var yearArray = (getAllYears(data)).sort();
return csvWriter(yearArray);
}

function csvWriter(data){
const createCsvWriter = require("csv-writer").createObjectCsvWriter;
const csvWriter = createCsvWriter({path: 'trData.csv'});
return csvWriter.writeRecords(data);
}

更新:错误消息中描述了真正破坏您的应用程序的原因:TypeError:仅支持绝对 URL,因此问题是您在读取 ​​CSV 时使用相对路径,但 D3 使用 node-fetch 读取 CSV 文件并使用 node-fetch does not support relative URLs .

您可能想尝试使用 path.resolve() 封装 URL,例如 d3.csv(path.resolve('/dat/Meteorite_Landings.csv')) (另外,不要忘记之前需要路径,使用 const path = require('path');)。

关于javascript - 如何解决 Node.js UnhandledPromiseRejectionWarning : Unhandled promise rejection: TypeError: Only absolute URLs are supported?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56442351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com