Tag: asynchronous

node.js,bluebird,执行path控制不佳

我正在努力学习蓝鸟; 我不是想控制执行。 (这个bluebird问题来自Node.js,asynchronous模块,并发性的一个async.js问题。) 这里有一些代码,加上我期望得到的和我所得到的。 问题: 为什么#3function在(1)#1和#2function结束之前开始,以及(2)第一个错误检查function? 什么导致了错误? 发生了什么“代码结束”? var Promise = require('bluebird') function part1() { console.log('part1 start') return new Promise(function(resolve, reject) { Promise.all( [ part1a(1), part1a(2) ]) .then( function(err) { if (err) console.log('part1 error after #1 and #2') else console.log('part1 done with #1 and #2') } ) .then(part1a(3)) .then( function(err) { if (err) console.log('part1 error […]

bcryprasynchronous与同步node.js

问题很简单,即使我们在node.js中使用Bcrypt模块的asynchronous模式,它仍然会用完bcrypt周期的CPU吗? 它不像在其他地方执行的数据库读取,而是一个CPU操作。 那么为什么asynchronous方法具有性能优势

节点NAN:在AsyncWorker的Execute方法中调用GetFromPersistent

我正在为节点构build一个本地扩展,其中包含一个完成时的callback函数。 我正在传递一个节点缓冲区到通话。 它包含要由扩展处理的内容的有效载荷。 我应该能够将我的缓冲区存储在我的AsyncWorker的构造函数中的持久性存储中,并在需要时稍后检索它。 这个例子(来自nantesting套件)是我通常基于我的代码: https : //github.com/nodejs/nan/blob/master/test/cpp/bufferworkerpersistent.cpp 这个testing是有效的,但是直到HandleOKCallback方法对缓冲区没有任何作用,这对我来说并不是很有趣。 我需要在Execute方法中访问缓冲区。 如果我只是在testing的Execute()方法中添加一行来尝试访问缓冲区,如下所示: void Execute () { printf("before GetFromPersistent\n"); v8::Local<v8::Value> handle = GetFromPersistent("buffer"); printf("after GetFromPersistent\n"); printf("buffer @%llux len %ld\n", (uint64_t)node::Buffer::Data(handle), node::Buffer::Length(handle)); Sleep(milliseconds); } 我在GetFromPersistent调用中遇到seg错误。 我的问题是:我错过了什么? 我应该不能将一个持久对象拖入Execute方法吗? 如果是这样,为什么不呢?

无法理解Connect模块中的callback

我在读一本关于NodeJs Connect的书。 有关于basicAuth模块的这个小部分。 我知道basicAuth已经被弃用了,但是我不能理解这个简单的代码。 这本书说 提供asynchronouscallback函数 最后一个选项是类似的,除了这次callback传递给了带有三个参数的basicAuth(),这个参数可以使用asynchronous查找。 从磁盘上的文件进行身份validation或从数据库查询时,这非常有用。 代码清单7.7 连接basicAuth中间件组件进行asynchronous查找 而没有其他的信息。 这就是关于在basicAuth中进行callback的整个部分 所以,代码获取用户名和密码。 然后假设的对象User有一个方法来authendicate这个用户是否真的存在。 完成后,调用gotUser函数。 gotUser包含返回的错误(=找不到用户名/密码的用户)或返回的用户对象(用该用户名/密码find的用户)。 我对吗? gotUser检查是否有错误。 如果有,则返回并调用具有错误参数的callback 。 那么等一下,这个callback做什么呢? 它没有在任何地方定义 它将错误传递给error handling函数吗? 如何? 如果没有错误, gotUser再次用null (=没有错误)和user gotUser调用callback 。 再一次,callback会做什么? 为什么将返回的用户传递给callback,而不是获取其名称,邮件,年龄等,并在会话中使用它们,或填充标记的innerHTML或其他? 谢谢

完整的callback没有被async.parallel调用

我需要做一个API调用100行来填充描述(我喜欢并行)。 然而,在这种情况下,一些行可能没有描述api将返回404.我需要显示一条警告消息,当有一行或多行没有描述,并从模态数据中删除这些行,这意味着我需要一个完整的callback或完成callback。 然而completeCallback没有被调用,我认为这是因为有些行没有描述。 你能告诉我如何做到这一点? 这是我的代码: function getDescription(processedData) { $.ajax({ url: baseApiUrl + '/Summary?id=' + processedData.id, type: 'GET', dataType: 'json', contentType: 'application/json', success: function (data) { processedData.SummaryDescription = data; }, error: function (xhr, status, e) { if(xhr.statusCode === 404){ processedData.SummaryDescription = ''; }else{ } } }); }; //Below line is in a look parallelCallArray.push(getDescription.bind(null, processedData)); //Below […]

使用阻止长同步操作将暂停Node.js中的所有用户?

如果我有使用Node.js的SMTP服务器(如haraka )或Web服务器(如Express ),我必须使用无法转换为asynchronous的同步function会发生什么? 如果我必须以同步的方式创build一个HTTP请求,那么服务器将被挂起到所有的用户,直到http请求完成,或者只能挂起到当前的用户/电子邮件? 所有用户的处理是否会暂停?

如何使learnyounode#9杂耍asynchronous工作

我正在尝试通过nodechool的learnyounode。 这个问题和前面的问题(HTTP COLLECT)是一样的,你需要使用http.get()。 但是,这次您将获得三个URL作为前三个命令行参数。 您必须收集每个URL提供给您的完整内容并将其打印到控制台(stdout)。 您不需要打印出长度,只需将数据打印为string; 每个URL一行。 问题在于,你必须按照与作为命令行参数提供给你的URL相同的顺序打印出来。 这是我的代码: var bl = require('bl'); var http = require('http'); var urls = [process.argv[2], process.argv[3], process.argv[4]] var dataArray = []; var count = 0; for (var i = 0; i <= urls.length-1; i++) { http.get(urls[i], function(response){ response.setEncoding('utf8').pipe(bl(function (err, data) { dataArray[i] = data.toString(); count++; if (count==2){ dataArray.forEach(function(item){ console.log(item); […]

使用promise将asynchronous函数的结果作为“variables”返回

我在NodeJS中asynchronous执行时遇到了问题。 特别是,我有很多用例,我希望在代码中稍后使用asynchronous请求的结果,而不想将整个事件包装在另一个缩进级别,如async.parallel 。 我知道解决这个问题的方法是使用承诺,但我正在努力实现正确的实施,而我尝试的资源并没有帮助。 我目前的问题是这样的:我需要立即得到一个MongoDB文档_id插入时。 我已经从使用MongoJS切换到使用官方的MongoDB驱动程序,因为我知道MongoJS不支持承诺。 任何人都可以通过提供一个基本的例子来说明如何使用promise来返回这个值吗? 再次感谢。

如何使用promise和vo.js返回Hapi答复

我有一个asynchronous的nightmare.js过程,它使用vo.jsstream程控制和一个生成器: vo(function *(url) { return yield request.get(url); })('http://lapwinglabs.com', function(err, res) { // … }) 这需要使用reply()接口返回对Hapi(v.13.0.0)的承诺。 我已经看到Bluebird和其他承诺库的例子,例如: 如何从hapi.js路由处理程序之外进行回复 ,但是无法适应vo.js. 有人可以提供一个这样的例子吗? server.js server.route({ method: 'GET', path:'/overview', handler: function (request, reply) { let crawl = scrape.doCrawl({"user": USERNAME, "pass": PASSWORD}); reply( … ).code( 200 ); } }); scrape.js module.exports = { DoCrawl: function(credentials) { var Nightmare = require('nightmare'); var […]

asynchronous/ Callstack混淆

好吧,我很确定我知道问题是什么,但我不能为了我的生活找出解决办法。 下面代码的工作方式是前端将两个字发回服务器,发生一些消毒,并将string分解成一个数组。 然后迭代该数组,为每个单词向Wordnik API提供asynchronous请求。 返回给客户端的结果数据结构是一个带有{word1: […synonyms], word2: […synonyms]} 。 用两个字,这个工作正是我想要4次5次。 第五次,第二个单词的同义词被应用到第一个单词,第二个单词没有数据。 显然,发送更多的话,数据混淆更频繁发生。 所以,我很确定这是一个调用堆栈问题,但我不知道如何解决它。 我一直在想,如果我把wordnikClient包在setTimeout(…,0)中; 这是朝着正确的方向迈出的一步,但感觉就像我误用了这个模式。 那里有什么智慧的话? 编辑: https : //github.com/ColinTheRobot/tweetsmithy-node/blob/master/server.js这是以前的版本,它具有相同的asynchronous问题。 我最初是用Promisedevise的,但是在过去的几天里,我意识到它没有做任何事情/我也可能误用了它,所以现在就把它拿出来。 app.get('/get-synonyms', (req, res) => { var tweetWords = sanitizeTweet(req.query.data); getDefs(tweetWords, res); }); var getDefs = function(tweetWords, res) { var i = 0; var serialized = {}; tweetWords.forEach((word) => { wordnikClient(word, (body) => { var […]