gpt4 book ai didi

javascript - NodeJS 同步函数

转载 作者:行者123 更新时间:2023-12-02 16:40:54 25 4
gpt4 key购买 nike

我有一个文本文件,其中仅列出了一些 URL。我试图从文本文件中取出每一行,并将其添加到网址数组中以进行进一步操作。

var fs = require('fs'),
Urls = [];

var returnURLS = function(file) {

var read = function(callback) {
fs.readFile(file, function(err, logData){
if (err) throw err;
var text = logData.toString();
var lines = text.split('\n');
lines.forEach(function(line, callback){
var url = "http://www." + line;
Urls.push(url);
});
callback();
});
};

var giveBackAnswer = function() {
console.log("1: ", Urls);
return Urls;
};

read(giveBackAnswer);

};

console.log("2: ", returnURLS('textFileWithListOfURLs.txt'));

我的控制台输出清楚地表明,在程序应该记录结果时文件系统操作尚未完成,但结果最终确实显示出来了。

2: the urls are  undefined
1: [ 'http://www.cshellsmassage.com',
'http://www.darsanamartialarts.com',
'http://www.davidgoldbergdc.com',
'http://www.dayspaofbroward.com',.... (etc)

让这些功能同步运行的最佳方法是什么?1)通过文件系统操作编译Urls数组2)数组填满后将其打印到控制台

最佳答案

好吧,你的函数返回undefined。这是因为 JavaScript 中的所有函数都返回 undefined

如果您想使用回调来 Hook 您的函数,则它本身必须接受回调,然后您将继续放置在该回调中:

var returnURLS = function(file, whenDone) {

var read = function(callback) {
fs.readFile(file, function(err, logData){
if (err) whenDone(err);
var text = logData.toString();
var lines = text.split('\n');
lines.forEach(function(line, callback){
var url = "http://www." + line;
Urls.push(url);
});
callback();
});
};

var giveBackAnswer = function() {
console.log("1: ", Urls);
whenDone(null, Urls);
};

read(giveBackAnswer);

};

这会让你这样做:

returnURLS("textFileWithList.txt", function(err, list){
console.log("2: ", list);
});

使用 promise (bluebird)的替代解决方案如下所示:

var fs = Promise.promisify(require("fs"));
var returnURLS = function(file) {
return fs.readFileAsync(file).then(function(logData){
var text = logData.toString();
var lines = text.split('\n');
return lines.map(function(line){
return "http://www." + line;
});
});
};

这会让你这样做:

returnURLS("url.txt").then(function(data){
console.log("Got data!", data);
});

关于javascript - NodeJS 同步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27520495/

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