Tag: asynchronous

Mongoose – 模式对象的asynchronousvalidation

我想确定如何做一个Mongoose模式的asynchronousvalidation – 特别是在这种情况下的用户名。 TMK,以确保用户名是唯一的,我们必须手动查询数据库,看看是否已经存在相同的用户名。 这是一个asynchronous查询。 然而,对每个模式项目使用'validate:'属性的方法似乎要求同步validationfunction。 换句话说,这一行: validation:[validation.usernameValidator,'不是有效的用户名'] 似乎要求usernameValidator是同步的,问题是我需要它是asynchronous的,由于上述原因。 所以,我有一个像这样的用户Mongoose模式: var validation = { usernameValidator: function (candidate) { return true; }, passwordValidator: function (candidate) { return true; } }; userSchema = mongoose.Schema({ username: { type: String, isUnique: true, required: true, validate: [validation.usernameValidator, 'not a valid username'] }, passwordHash: { type: String, required: true, validate: [validation.passwordValidator, […]

推迟在node.js中执行asynchronous消息传递函数

我有一系列经过解码的多段线返回的纬度/经度对。 使用forEach我提取每个纬度/经度对和使用pubnub.publish() ,发送这个数据到一个通道。 pubnub.publish()是一个asynchronous函数,我需要在每一步通过forEach循环来延迟发布消息。 我已经查看了setTimeout立即执行的很多答案,并尝试了下面的不同版本,包括不封装setTimeout在闭包中,但无法延迟发布 – 它只是尽快发送它们。 任何人都可以指出任何明显的错误? decodedPolyline.forEach(function (rawPoints) { var value = { lat: rawPoints[0], lng: rawPoints[1] }; var sendmsg = function () { pubnub.publish({ channel: id, message: value, callback: function (confirmation) { console.log(confirmation); }, error: function (puberror) { console.log('error: ' + puberror); } }); }; (function() { setTimeout(sendmsg, 2000); })(); normalised.push(value); });

新手async.waterfall

我试过使用asynchronous。 我有一个async.waterfall的路由function。 第一个函数调用外部函数并获取usersData中的所有用户第二个函数通过async.each调用外部函数为每个用户search信息。 我想再次传递用户数据与新闻价值第3function。 在第三个function,目前,我有一个async.each,我看每个用户的数据。 我的问题 1)在第二个函数中,我不会获取每个用户的信息。 2)第三个函数在第二个之前被调用,而我没有获取新的数据谢谢 router.post('/launch',function(req,res,next){ async.waterfall([ function(cb){ // fetch the global users fetchUsers(usersData,cb); }, function(usersData,cb){ async.each(usersData, function(userdata,cb){ // fetch other data for each user calcBalance(userdata, cb); },function(err){ cb(err,usersData); }); }, function(usersData,cb){ async.each(usersData, function(userdata,cb) { //watch the info with the news data console.log(' 2 '+ JSON.stringify(userdata)); //console.log(3); } ); }, ], function(err,results){ […]

使用supertest和async.parallel发送并行http请求?

在并行/并发请求发送到应用程序时,我发现了一个有趣的问题,这个问题在探索性testing中发生。 我试图用supertest复制testing自动化的情况下,但我做错了使用asynchronous库。 任何人都可以让我知道我失踪了吗? it('will handle concurrent GET requests', function(done){ var asyncTasks = []; for (i = 0; i < 30; i++){ asyncTasks.push(function(done){ agent.get('url') .set('headerHere', 'someVal') .send('') .expect(200, done); }) }; async.parallel(asyncTasks, function(){ done(); }); }) 它或者不是断言预期的代码,或者根本不能说明任务。

在同一个node.js程序中调用asynchronus和synchronus函数

在下面的nodejs程序中,input.txt中只有一个string“abc”。 var fs = require("fs"); // Asynchronous read fs.readFile('input.txt', function (err, data) { if (err) { return console.error(err); } console.log("Asynchronous read: " + data.toString()); }); // Synchronous read var data = fs.readFileSync('input.txt'); console.log("Synchronous read: " + data.toString()); console.log("Program Ended"); 输出是 Synchronous read: abc Program Ended Asynchronous read: abc 现在问题是,当程序开始执行时,首先看到asynchronous读文件调用,并在后台运行“读input.txt”的过程,然后服务器看到同步读调用,并再次开始读取input.txt 。 但是,由于asynchronous调用已经开始读取,所以当同步函数完成对.txt的读取之后,asynchronous函数的callback就会被传递给事件循环,并且应该先被执行。 所以第一行应该是 Asynchronous read: abc […]

节点并发/快速请求生命周期/可能的竞争状态?

我正在构build一个多租户Node应用程序,租户通过查询string进行标识。 我也有一个API客户端,基于该网站进行身份validation(oauth)请求。 我的问题是,我是否可以保持API客户端作为一个单身的对象,只是更新其中的会话 – 是否会遇到竞争条件,因为另一个请求进来,同时我进行asynchronous与客户的操作。 const session = new Session({ apiKey: 'xxx', secret: 'xxx' }) const client = new Client({ session }) app.use((req, res, next)=> { res.locals.client = client; next() }) app.use((req, res, next)=> { let { client, db } = res.locals; if (req.query.tenant) { return db.Tenant.findOne({ tenant: req.query.tenant }) .then((tenant)=> { client.updateSession({ access_token: tenant […]

在承诺链中有if-else条件

我有一个承诺链,并在一些点我有if-else条件如下: .then(function() { if(isTrue) { // do something returning a promise } else { // do nothing – just return return; } }) .then(function() { … }) 老实说,我不喜欢这种模式。 我感觉错了。 我的意思是使用一个简单的回报没有任何东西 你有什么想法让这个代码看起来不一样吗?

多次asynchronous调用后callback?

我正在使用Gmail API检索循环中的邮件,并为每条邮件执行req.write()。 每个api调用都有一个callback函数,但是如何知道整个集合是什么时候完成的,以便我可以结束响应? 我尝试了以下,但注意到,callback没有按照数组索引的顺序执行,所以我不能只是做我注释的线。 for (var i = 0; i < messages.length; i++) { var message = messages[i]; console.log('- %s', message.id); (function(e){ var request = gmail.users.messages.get({ auth:auth, id:message.id, userId: 'me' }, function(err, response) { if(err) { console.log('API returned an error: ' +err); return; } res.write(JSON.stringify(response,null,'\t')); console.log(e); //if(e==messages.length-1) res.end(); } ); })(i); }

如何重构asynchronous重复代码

我有下面的代码片段,我想从重复的代码重构(做一个function)。 function add(logger, client, args, callback) { client.execute('some command', args, function (err, result) { if (err) { logger.error({err: err}); return callback(err); } // do more… logger.debug({result: result}); return callback(null, result); }); } 所有对client.execute的asynchronous调用都有重复的内部callback。 我想把它拉起来,并从中做出一个function。 所以需要带参数,logging器和callback函数。 我如何做一个function呢? 之后,function添加什么样子?

Sails.js:服务res.view()后,如何保持运行代码?

根据sails 文档 ,res.view()是terminal。 这意味着它应该是给定请求的最后一行代码。 不过,有时候我想在后台运行代码而不强迫用户等待它。 如更新日志,或与此请求相关的后台更新。 什么是正确的方式来实现这样的事情?