0
我正在撞牆,想弄清楚如何將異步寫入文件的數據推送到數組中。同步寫入數據(並檢查項目是否是列表中的最後一項)需要太多時間,因此我決定使其運行異步。做了一些研究後,似乎我可以使用回調異步操作完成後運行一個函數
我不希望使用外部庫來做到這一點,因爲我非常確定回調或Promise應該做的伎倆。謝謝!
//Iterate through list and make HTTP request to get data
dataDocument.map(function(item, index) {
request(item, function(err, res, html) {
if (err) throw err;
renderData(html, item);
});
});
//Renders data
function renderData(html, item) {
...some calculations here.
writeData(output, id, function() {
pushed(output);
});
};
//Writes the data on file
function writeData(output, id) {
fs.appendFile('./output.json', output);
//SHOULD I USE A CALLBACK HERE TO PUSH INTO AN ARRAY ONCE IT'S COMPLETE?
};
//NEED HELP HERE: Pushed the data into an array and eliminates last comma.
function pushed(data) {
var arr = [];
arr.push(data);
}
不明白「檢查,如果該項目是最後的名單上)花費太多的時間,所以我決定把它運行異步」。你能基本描述這個數據處理的工作流程嗎? – wannadream
你通常不會只是決定做一些異步的東西。底層操作既可以是或者不是異步的。向數組添加項目本身並不是異步的。 'fs.appendFile()'本身是異步的。真的不知道你想要完成什麼。目前尚不清楚的問題。請詳細說明你想要做的事情。而且,請在您的問題中使用文字,而不是在您的代碼中留言。 – jfriend00
返回承諾並連接'.then'來創建一個承諾級聯,這將以迭代方式調用。 – botika