gpt4 book ai didi

javascript - 我的解决方案似乎是 "Ugly"

转载 作者:行者123 更新时间:2023-12-03 06:04:42 30 4
gpt4 key购买 nike

经过大量的修改和搜索,我能够得到这个代码。然而,它感觉很脏,我不得不经历很多麻烦,因为 Node 不喜欢将数据传递给全局变量,有没有更好的方法来编写这个?我对 Node 很陌生,所以我觉得我缺少一些可以让我的生活变得更轻松的东西。根据@JordanHendrix的建议,我将转向模板文字。

var wikipedia = require("node-wikipedia");
var infobox = require('wiki-infobox');
var Promise = require('es6-promise').Promise;

var fs = require('fs');

String.prototype.format = function()
{
var content = this;
for (var i=0; i < arguments.length; i++)
{
var replacement = '{' + i + '}';
content = content.replace(replacement, arguments[i]);
}
return content;
};


function getLinks() {
return new Promise(function(resolve, reject) {
wikipedia.page.data("List_of_hip_hop_musicians", { content: true }, function(response) {
fs.writeFile("response.json", JSON.stringify(response, null, 2), function(err) {
if(err) {
return console.log(err);
}
});
resolve(response.links);
});
});
}


function getInfo(links){
return new Promise(function(resolve, reject) {
fs.appendFile("info.csv", "name, background, birth_name, birth_date, birth_place, origin, genre, occupation, instrument, years_active, label, website\n", function(err) {
if(err) {
return console.log(err);
}
});
for (i=0; i<10; i++) {
var link = links[i]['*'];
resolveInfo(link).then(function(newText){
fs.appendFile("info.csv", newText, function(err) {
if(err) {
return console.log(err);
}
});
});
}
resolve(text)
});
}


function resolveInfo(link) {
return new Promise(function(resolve, reject) {
infobox(link, 'en', function(err, data){
if (err) {
return console.log(err);
}
try {
var text = '{0}, {1}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}\n'.format(data.name.value, data.background.value, data.birth_name.value, data.birth_date.value, JSON.stringify(data.birth_place), data.origin.value, data.genre.text, JSON.stringify(data.occupation), data.instrument.text, data.years_active.value, data.label.value, data.website.value);
} catch(err){
var text = "";
}
resolve(text);
});
});
}


getLinks().then(function(links) {
getInfo(links).then(function(text){
});
});

最佳答案

我会考虑一些事情。第一:尽可能使用箭头函数,让你的代码看起来更干净。

new Promise((resolve, reject) => {
//...
});

您可能想查看 promisification以进一步清理。不过,您需要使用 bluebirds Promise 库(无论如何我都会推荐它)。

var fs = require("fs");
Promise.promisifyAll(fs);
fs.readFileAsync("file.js", "utf8").then(...)

最后但并非最不重要的一点是,正确地链接你的 promise :

getLinks()
.then(getInfo)
.then(text => console.log(text));

关于javascript - 我的解决方案似乎是 "Ugly",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606511/

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