Tag: 同步

Node.js:node.js中的http.get方法是否有同步版本?

node.js中有没有同步版本的http.get方法? 就像是: http.getSync({ host: 'google.com', port: 80, path: '/' }, function(response){ }); console.log(response) 有时候这会非常有用。

Node.js同步与asynchronous

我目前正在学习node.js,我看到2个同步和asycn程序(同一个)的例子。 我明白一个callback的概念,但我试图理解第二个(asynchronous)的例子的好处,因为它们似乎是两个正在做同样的事情,即使这种差异… 你能否详细说明为什么第二个例子会更好? 我会很乐意得到更广泛的解释,这将有助于我理解这个概念。 谢谢!! 第一个例子: var fs = require('fs'); function calculateByteSize() { var totalBytes = 0, i, filenames, stats; filenames = fs.readdirSync("."); for (i = 0; i < filenames.length; i ++) { stats = fs.statSync("./" + filenames[i]); totalBytes += stats.size; } console.log(totalBytes); } calculateByteSize(); 第二个例子: var fs = require('fs'); var count = 0, totalBytes […]

如何编写一个node.js函数等待事件在“返回”之前触发?

我有一个不是 Web应用程序的节点应用程序 – 它在返回1之前完成了一系列asynchronous任务。在返回之前,立即将程序结果打印到控制台。 在返回之前,如何确保所有asynchronous工作都已完成? 我可以通过在调用res.end()之前完成所有完成的任务来完成类似于Web应用程序的任务,但是在让脚本返回之前,我没有任何要调用的最终“事件”的等价物。 看到下面我的(破碎)函数,试图等到callStack为空。 我刚刚发现这是一种无意义的方法,因为在进入processObjWithRef中调用的任何asynchronous函数之前,节点会等待processHub完成。 function processHub(hubFileContents){ var callStack = []; var myNewObj = {}; processObjWithRef(samplePayload, myNewObj, callStack); while(callStack.length>0){ //do nothing } return 1 } 注意:以前我已经尝试了很多次,用像async这样的库来实现这种行为(请参阅我的相关问题: 如何使这个调用请求在nodejs中同步? ),所以请在提出任何build议之前将其答案和注释考虑在内基于“只使用asynchronous”的答案。

环回:embedded式模型在脱机同步中不起作用

我已经遵循了loopback离线同步的例子,并创build了我自己的embedded式文档模型。 我创build了一个名为Project的模型,其中ProjectMembers是embedded模型。 这是我的模型: Project.json { "name": "Project", "base": "PersistedModel", "strict": "throw", "persistUndefinedAsNull": true, "trackChanges": true, "properties": { … }, "relations": { "members": { "type": "embedsMany", "model": "ProjectMember", "property": "members", "options": { "validate": true, "forceId": false } } } } ProjectMember.json { "name": "ProjectMember", "base": "Model", "idInjection": true, "properties": { … }, "validations": [], "relations": {}, […]

Nodejs同步对于每个循环

我想为每个循环做一个,但它有同步运行。 循环的每一次迭代都会执行一个http.get调用,并将返回json以将值插入到数据库中。 问题是,for循环asynchronous运行,并导致所有的http.gets一次运行,我的数据库不会最终插入所有的数据。我使用async-foreach来尝试做我想做的这样做,但我不必用它,如果我能以正确的方式做到这一点。 mCardImport = require('m_cardImport.js'); var http = require('http'); app.get('/path/hi', function(req, res) { mCardImport.getList(function(sets) { forEach(sets, function(item, index, arr) { theUrl = 'http://' + sets.set_code + '.json'; http.get(theUrl, function(res) { var jsonData = ''; res.on('data', function(chunk) { jsonData += chunk; }); res.on('end', function() { var theResponse = JSON.parse(jsonData); mCardImport.importResponse(theResponse.list, theResponse.code, function(theSet) { console.log("SET: " […]

fs.writeFileSync给出错误:UNKNOWN,在nodejs中写入同步文件的正确方法

我有一个NodeJS服务器应用程序。 我有我的日志logging的这一行代码: fs.writeFileSync(__dirname + "/../../logs/download.html.xml", doc.toString()); 有时它可以正常工作,但是在负载较重的情况下,会产生这种exception Error: UNKNOWN, unknown error 'download.html.xml' PS:我在这里find了一个链接: http ://www.daveeddy.com/2013/03/26/synchronous-file-io-in-nodejs/ Blogger描述了writeFileSync并没有真正完成写回来。 有没有任何正确的方法来做同步的方式,即没有callback?

NodeJs,javascript:.forEach似乎是asynchronous的? 需要同步

我目前正在与3个朋友一起使用nodeJs,expressJs,MongoDB,html5,…因为我们对这些技术相当陌生,所以遇到了一些问题。 我找不到解决scheme的一个大问题是某些代码的asynchronous执行。 我想每一个循环完成,以便我有一个更新的在线朋友列表,并执行res.render(我通过在线朋友列表),因为目前它完成res.render之前完成循环。 码: function onlineFriends(req, res) { var onlinefriends = new Array(); onlinefriends.push("mark"); FriendList.findOne({ owner: req.session.username }, function (err, friendlist) { friendlist.friends.forEach(function (friend) { // here forEach starts OnlineUser.findOne({ userName: friend }, function (err, onlineFriend) { if (onlineFriend != null) { onlinefriends.push(onlineFriend.userName); console.log("a loop"); } }); }); console.log("online friends: " + onlinefriends); console.log("redirecting"); res.render('index', […]

BrowserSync非常慢

我很乐意使用BrowserSync进行开发。 但是,页面加载(不仅在更改后重新加载)非常缓慢。 我使用proxy模式。 浏览不带BrowserSync的页面应该是很快的。 一个原因可能是我安装BrowserSync时出现以下错误: > ws@0.4.31 install /usr/local/lib/node_modules/browser-sync/node_modules/socket.io/node_modules/engine.io/node_modules/ws > (node-gyp rebuild 2> builderror.log) || (exit 0) CXX(target) Release/obj.target/bufferutil/src/bufferutil.o SOLINK_MODULE(target) Release/bufferutil.node SOLINK_MODULE(target) Release/bufferutil.node: Finished CXX(target) Release/obj.target/validation/src/validation.o SOLINK_MODULE(target) Release/validation.node SOLINK_MODULE(target) Release/validation.node: Finished 我从头开始安装节点(使用brew和软件包安装程序),但无法摆脱错误。 而且,如果使用Gulp或通过命令行运行BrowserSync,则没有什么区别。 任何想法?

在Node.js中创build同步MongoDB查询的正确方法是什么?

我正在使用MongoDB的Node.JS驱动程序,我想执行一个同步查询,就像这样: function getAThing() { var db = new mongo.Db("mydatabase", server, {}); db.open(function(err, db) { db.authenticate("myuser", "mypassword", function(err, success) { if (success) { db.collection("Things", function(err, collection) { collection.findOne({ name : "bob"}, function(err, thing) { return thing; }); }); } }); }); } 问题是,db.open是一个asynchronous调用(它不会阻塞),所以getAThing返回“未定义”,我希望它返回查询的结果。 我敢肯定,我可以采取某种阻断机制,但是我想知道正确的做法。

所有的JavaScriptcallback是asynchronous的吗? 如果没有,我怎么知道哪些是?

我很好奇所有的JavaScriptcallback是否是asynchronous的,或者只是在某些情况下是这种情况。 此外,我确定JavaScript代码asynchronous(或使用asynchronousJavaScript的方法)是什么使浏览器和nodejs不同,所以我想知道在每种情况下构成真正的asynchronousJavaScript。 我的印象是,在下面的情况下,我实际上没有编写asynchronous代码。 function addOne(value){ value = value + 1; return value; } function simpleMap(values, callback){ for(i = 0; i < values.length; i++){ val = values[i]; val = callback(val); values[i] = val; } return values; } newValues = simpleMap([1,2,3], addOne); 但是,例如,我知道jQuery的AJAXfunction是真正的asynchronous(不考虑现在可用的承诺)。 什么是使jQuery的AJAXasynchronous? 它是否涉及XHR请求,并且在浏览器中,所有的XHR请求都是asynchronous的? 我对nodejs环境有同样的问题。 如果节点中的某些东西像文件I / O,process.nextTick,setTimeout或setInterval那样只能是asynchronous的? 为什么当我用mongodb / mongoose进行数据库调用时,是asynchronous的? 幕后发生了什么事情呢? 是由环境预先确定的asynchronous“情况”? 或者有没有办法使自己的function真正的asynchronous,而不是利用环境的非常具体的function(如xhr,节点中的文件io,process.nexttick等)?