0
經過大量的修補和搜索後,我能夠得到此代碼tonwork。然而,它感覺骯髒,我不得不經歷很多麻煩,因爲節點不喜歡將數據傳遞給全局變量,有沒有更好的方法來寫這個?我對節點非常陌生,所以我覺得我缺少那些會讓我的生活更輕鬆的事情。根據@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){
});
});
爲什麼不使用模板文字在這裏,如果你不知道它們是什麼谷歌「ES6模板文字」 – JordanHendrix
@JordanHendrix probs因爲我今天從未聽說過這個詞。我從字面上剛剛開始在幾個小時前打字。我來自一個沉重的Python和Go背景。雖然我只是google了一下,雖然這似乎是一個很好的替代字符串原型它沒有幫助實際問題,在線66 console.log(文本)我沒有看到我期望的數據。 – reticentroot
好酷,是啊我以爲你可能不知道,看看,這將是有道理的! https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Template_literals – JordanHendrix