我不得不改变一个json元素的值, 如果它存在 ,在进行asynchronous函数调用之前,但我不知道这个代码是否会按我想要的顺序执行。 这是一个简单的例子: function first_function(json, callback) { get_only_valid_elements_json(json, function(valid_json) { if (valid_json.element) { valid_json.element = something; } update_something(valid_json, function(error) { if (error) { return callback(error); } else { return callback({success:"YAY"}); } }); }); } 我想知道下面的代码将如何执行,更重要的是为什么 。 谢谢!
我正在实施一个用Node.js编写的项目,并从Mysql获取值。 当我在我的项目更深入我的嵌套callback像这样 hold.getEntry(function(data){ var ref = data.ref; var id = data.id; var message = data.mess; var json = JSON.parse(message); if(ref === null){ } else { hold.checkPositionCandidate(ref, id, json, function(dataa){ console.log("checker " + dataa); if(dataa == false){ } else { //\/ here I get error callback is not a function hold.getVoterCount(id, json, function(votercount){ if(votercount.count == 0){ […]
我喜欢执行下面的代码…但是正如你所看到的那样 – 这将需要100亿个循环! 所以我想知道 – 你们会build议让它旋转得更快吗? 之所以这样做,是因为最内在的方法需要对一些历史数据进行一些复杂的计算 – 从数据库中获得大约700万行数据,是find给定参数af的最佳“设置”,其给出最佳结果… var a = 0.1; while(a <= 10) // 100 { var b = 0.1; while(b <= 10) // 100 { var c = 0.1; while(c <= 10) // 100 { var d = 0.1; while(d <= 10) // 100 { var e = 1; while(e <= […]
我正在尝试使用mongoose将某些内容保存到数据库中。 事情是我需要确保保存完成之前,我在程序中移动并closures连接。 知道保存是在mongooseasynchronous我试着使用此代码: saveFunction = function(song){ song.save(function(err, userObj){ if(err){ console.log('Error' + err); } else{ console.log('saved successfully:', userObj); } }); }; database.prototype.add= function(newSong){ mongoose.connect(url); var song = new songModel({id : newSong.getId(), title : newSong.getTitle(), artist : newSong.getArtist, genre : newSong.getGenre(), rating : newSong.getRating(), link : newSong.getLink()}); console.log("before async"); async.parallel([function (callback){ saveFunction(song); callback(); }],function(){ mongoose.connection.close(); console.log('closed connection'); […]
我正在编写一个使用node.js的爬虫。 首先,我需要获取主页面来获取该页面上每个项目的URL,然后抓取每个项目的URL以逐一获取它们的详细信息 fetchPage(url)是获取链接的HTML文本 function fetchPage(url){ return new Promise( (resolve,reject)=>{ agent .get(url) .end(function(err,res){ if (err){ reject(err); } else{ resolve(res.text); } }); }); } 这是这个爬虫的全球通话 fetchPage(link).then( (result)=>{ const urls=getUrls(result); for (var i=0;i<5;i++){ fetchItem(urls[i].link).then( (result)=>{ console.log('Done'); }, (error)=>console.log(error) ); } }, (error)=>console.log(error) ); 我处理获取所有项目的URL后获取主页面(通过getUrls ) fetchItem(url)是另一个Promise ,它确保了一个项目的每个HTML文本在被fetchPage后应该通过getItem来处理 function fetchItem(url){ return new Promise( (resolve,reject)=>{ fetchPage(url).then( (result)=>{ getItem(result); }, (error)=>reject(error) […]
我想我的http服务器返回从asynchronous函数返回的一些json。 我设法使它工作,但它只能工作一次,然后抛出:“发送后无法设置标题。 错误。 这里是下面的代码: var server = restify.createServer(); server.get('/', function(req, res, next) { feed("dilma",[]); eventEmitter.on('retorno', function(retorno){ res.send(retorno); }); }); server.on("listening", function() { console.log("server running!"); }); server.listen(7171); 进给function: var feed = function headLinesBySite(word, l) { if (!Array.isArray(l)) { console.log("por favor passe um array"); return false; } if (l !== []) { links = l; } links […]
var http = require('http'); var res = ["","",""]; for(i =2;i<5;i++){ http.get(process.argv[i],function(response){ response.setEncoding('utf8'); str = ""; count =i-2; response.on("data", function(data) { str = str.concat(data); }); response.on("end", function() { res[count] = str; console.log(count); console.log(res[count]); }); }); } while(true) { if(res[0]!==""&&res[1]!==""&&res[2]!=="") { console.log(res[0]); console.log(res[1]); console.log(res[2]); break; } } 我将有三个URL作为前三个命令行参数。 我的工作是从每个URL的string中收集数据,并按命令行中显示的顺序将其打印到控制台。 现在代码不会打印任何东西,而且会陷入无限循环。 哪里不对?
我是NodeJS的新手。 我有以下代码片段。 var connection = mysql.createConnection(dbConfig); connection.connect(function(err) { if (err) console.log("MySQL Connection Error: ", err); else console.log("Connection successfully established"); }); connection.query("SELECT * FROM `members1617`;",function(err,rows) { if (err) console.log("err: ", err); else console.log("rows: ",rows); connection.end(); }); 这是不好的代码? 我认为这是因为不能保证在查询被激活之前connection.connect()已经完成并且连接已经build立。 而id连接之前,查询是esecuted然后会有各种各样的错误。 Async在这里工作如何?
我的node.js mocha套件中的典型testing如下所示: it("; client should do something", function(done) { var doneFn = function(args) { // run a bunch of asserts on args client.events.removeListener(client.events.someEvent, userMuteFn); done(); } client.events.on(someEvent, doneFn); client.triggerEvent(); }); 这里的问题是,如果client.triggerEvent()没有做正确的事情,或者如果服务器中断,永远不会调用someEvent ,那么done()将永远不会被调用。 这为以前没有使用过testing套件的人留下了一个模棱两可的错误,如: Error: timeout of 10500ms exceeded. Ensure the done() callback is being called in this test. 我的问题是,有没有办法重写这些testing,无论是与摩卡或除了另一个库,这使得asynchronous工作更容易遵循。 我希望能够输出如下内容: the callback doneFn() was never […]
我遇到了一个问题。 我有一个客户端,实例化具有布尔属性。 我想等到它切换到真,然后解决承诺。 我尝试了很多不同的方法,包括while循环,只是完全阻塞线程而不检查更新。 这是尝试 var startClient = function() { return new Promise((resolve, reject)=> { var client = CreateClient(); while(!client.ready) {} resolve(client); }); }; 我的问题是:有没有办法使用RxJs帮助..也许发射和事件,如果就绪属性更改? 下面是我想要做的更伪代码。 var startClient = function() { return new Promise((resolve, reject)=> { var client = CreateClient(); var emitter = Observable.watch(client, 'ready'); emitter.on('ready', function(result) { if(result) resolve(client); }); }; 有什么build议么? 谢谢!