Tag: asynchronous

meteor.js – 如何检查asynchronouscallback的值

CONTEXT 我做了一个调用,如果成功,将布尔值从false更改为true。 然后,在这个调用之外,我检查这个布尔值是否为真,如果是的话,我路由到另一个页面。 问题 控制台日志指出,在调用有时间改变布尔值之前,正在执行检查布尔值的if语句。 我意识到这是由于asynchronous性,但不知道这是什么正确的devise模式。 这是一个片段: //set variables to check if the even and user get updated or if error var eventUpdated = false; Meteor.call('updateEvent', eventId, eventParams, function(error, result){ if(error){ toastr.error(error.reason) } else { var venueId = result; toastr.success('Event Info Updated'); eventUpdated = true; console.log(eventUpdated) } }); console.log(eventUpdated) if (eventUpdated) { Router.go('/get-started/confirmation'); } 可能的解决scheme […]

专业的Node库如何实现asynchronous执行?

我花了一些时间查看Node Bcrypt ,以及它们如何实现以下asynchronous执行: bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) { // Store hash in your password DB. }); 他们使用asynchronouscallback执行计算量大的任务(盐生成)。 他们如何做到这一点,而不阻塞主节点IO线程? 我已经阅读了process.nextTick(),但是这似乎与在一个线程中分配CPU负载的setTimeout()类似(延迟了piper的支付)。 然后有childProcess.fork(),但我不认为他们正在使用,因为我无法在GitHub仓库的任何地方find它。 另外,你还有像Monk这样的库,可以实现: users.find({ name: 'Loki' }, '-bigdata').then(function () { // exclude bigdata field }) 在这个回购中任何地方都没有fork()出现。 我想为了Monk卸载这种处理将需要一个明确的stream程叉与某种recursion的asynchronouscallback。 我试图在我的应用程序中实现这种asynchronous操作,但想了解专业人员如何做到这一点。 有谁知道要做到这一点?

未处理的拒绝错误。 即使testing通过

我正在testing这个function: UserController.prototype.getDashboard = function getDashboard(req, res, next) { let pages, user; return this.User.findById(req.user.id) .populate('club') .execAsync() .then(dbUser => { user = dbUser; FB.setAccessToken(user.token); return FB.getAsync('me/accounts') }) .then(fbPages => { pages = fbPages.data; return Promise.all(pages.map(page => { return FB.getAsync(`${page.id}/events`) .then(events => events) .catch(e => next(Boom.wrap(e))); })) }) .then(events => { let entity = { user, pages: _.map(pages, […]

node.jsparsingpromise和返回值

我使用Microsoft bot框架来创build一个“简单的”PoC机器人。 我用一个教程作为基础,并扩展它。 对于不同的意图(例如,问候,再见等)以及其中有更多逻辑(reqstatus)的函数,我有几个基本函数。 简单的(即greeting.js)很好地返回答案,但更复杂的答案不(reqstatus.js)。 在独立的脚本中运行reqstatus.js的主代码(没有第一个“const getReqStatus =(entity)=> {”)。 server.js (main) – >参见调用“if(intent){”… const getFeelings = require('./intents/feelings.js') const getGoodbyes = require('./intents/goodbyes.js') const getGreetings = require('./intents/greetings.js') const getHelp = require('./intents/help.js') const getReqStatus = require('./intents/reqstatus.js') … const bot = new builder.UniversalBot(connector) // Intents based on definitions on recast const INTENTS = { feelings: getFeelings, goodbyes: getGoodbyes, greetings: […]

asynchronous函数返回Promise {<pending>}?

我有以下的asynchronous函数: async function readFile () { let content = await new Promise((resolve, reject) => { fs.readFile('./file.txt', function (err, content) { if (err) { return reject(err) } resolve(content) }) }) console.log(content) } readFile() 这运行得很好。 它按预期的方式将文件缓冲区输出到控制台。 但是现在,如果我尝试返回值: async function readFile () { let content = await new Promise((resolve, reject) => { fs.readFile('./file.txt', function (err, content) { if […]

重复提示用户,直到使用nodeJS async-awaitparsing为止

我试着重复地向用户询问问题,直到他们用这个代码给出了正确的答案。 问题是,如果用户没有在第一时间给出正确的答案,它不会解决。 var readline = require('readline'); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function promptAge() { return new Promise(function(resolve){ rl.question('How old are you? ', function(answer) { age = parseInt(answer); if (age > 0) { resolve(age); } else { promptAge(); } }); }); } (async function start() { var userAge = await promptAge(); console.log('USER […]

在Javascript中recursion遍历树

这在Java中是非常简单的任务,但是JavaScript的asynchronous特性使得这个任务(对我来说)几乎不可能,至less现在我已经知道了(我没有试图去bash javascript,喜欢这种语言! 这是非常基本的。 顶级树在我的mysql数据库中有一个null的父项。 很容易find孩子。 孩子们有可用的线路。 树的深度是可变的。 private static Set<Tree> getBranches( Tree trunk ) { Set<Tree> treeSet = new HashSet<Tree>(); if ( trunk != null ) { if ( trunk.hasLines() ) { //queries if tree has lines. returns true or false treeSet.add( trunk ); } for ( Tree tree : trunk.treeList ) { treeSet.addAll( getBranches( […]

node.js:对于每个行和更新asynchronous?

我需要从数据库查询行,每行处理一些信息,然后用结果更新每一行。 这是我的示例代码,其目的是循环遍历每一行并更新标签: var mysql = require('mysql'); var db = mysql.createConnection(config.database); db.connect(function() { db.query('SELECT id FROM testTable', function (err, rows) { if (err) { console.log(err); } else { if (rows.length) { for (var i = 0, len = rows.length; i < len; i++) { var row = rows[i]; console.log(row); var label = "Label_"+row.id; db.query('UPDATE testTable SET […]

节点asynchronousstreampipe道

我有这个代码工作在节点0.10,但它不打印0.8 var http = require('http'); var req = http.request('http://www.google.com:80', function(res) { setTimeout(function() { res.pipe(process.stdout); }, 0); }); req.end(); 经过一番猜测,我find了解决办法: var http = require('http'); var req = http.request('http://www.google.com:80', function(res) { res.pause(); setTimeout(function() { res.resume(); res.pipe(process.stdout); }, 0); }); req.end(); 但文件说,停顿是咨询,这是让我困惑。 为什么我应该暂停stream,这是不是连接在任何地方?

基准asynchronous代码(Benchmark.js,Node.js)

我想使用Benchmark.js模块来testing在node.js中编写的一些asynchronous代码。 具体来说,我想向两台服务器(一个用节点编写,一个用PHP编写)发送大约10,000个请求,并跟踪每台服务器完成所有请求所需的时间。 我打算编写一个简单的节点脚本来使用Benchmark来触发这些请求,但是我对如何在asynchronous代码中使用它有点困惑。 通常在节点模块中,当你的asynchronous代码完成时,你会调用一些callback函数,或者从函数中返回Promise等。但是对于基准testing,从我在文档中读到的所有东西,来处理asynchronous。 有谁知道我应该做什么或看什么? 如果需要,我可以手动编写基准; 它似乎是一个常见的用例,Benchmark或其他人可能已经在其专业级testing库中实现了它。 谢谢你的任何指示,〜Nate