Articles of callback

Express / MongoDB – 数据库操作期间的意外行为

我有一个用户列表,我试图存储/更新到我的mongoDB数据库。 但是只有我列表中的最后一个元素被考虑在内,其他用户则不能进入thenfunction。 我是Nodejs的新手,这似乎是由于我不明白的同步行为。 var User = require('../to/path/user-service'); …. userList.forEach(function(user) { try { User.updateUser(user); } catch(err) { return console.error(err); } }); 用户服务 … var User = mongoose.model('User', userSchema); console.log(user.name); export.updateUser = function (user) { Issue.findOne({name: user.name}) .then((user) => { if(user) console.log(user.name + ' has been updated'); else console.log(user.name + ' has been created'); }).catch((err) => console.error(err)); […]

将附加parameter passing给Node js中fs.readFile的callback函数

是否有可能将其他parameter passing给fs.readFile的callback函数。 我有我的代码来读取一个目录,并parsing所有的XML文件。 我需要传递文件名的callback链进行额外的处理。 截至目前我的代码是 var fs = require('fs'); var path = require('path'); module.exports.extractXMLBody = function (dirPath, ext) { fs.stat(dirPath, function (err, stats) { if (stats.isDirectory()) { fetchFiles(dirPath, ext, function (listOfFiles) { _.each(listOfFiles, function (val, key) { var completePath = dirPath + '/' + val; var fileName = path.basename(val, path.extname(val)) // TODO : Figure out […]

节点js中的嵌套asynchronousmongoDB调用

我有一个相当简单的问题,但我找不到一个优雅的解决scheme来解决这个问题。 在下面的代码中,我有两个对mongo数据库的嵌套调用。 我使用Monk来pipe理我的电话。 问题是:嵌套插入之前可能会发生for循环(1)循环。 所以下一个find(2)指令没有find最后一个插入的动作。 呼叫顺序是1-2-2-2-3-3-3(对于大小为3的动作列表)。 所以我所有的数据都被插入。 我的目标是有呼叫订单1-2-3-2-3-2-3 你有没有任何线索如何pipe理这样的问题,而不是在我的数据库发现一个大的和pipe理我的列表服务器端? (获取所有的数据,使自己的search,这是非常可怕的做,插入我想要的元素,然后把它推到数据库…) for (var action of actionList)//(1) { collectionActions.find(//(2) {eventid : action.eventid}, function(e,actionsFound) { if (actionsFound.length == 0) { collectionActions.insert(action, function(err, result)//(3) { console.log("insert action : " + action._id); }) } } ) }

太多的callback.. nodeJS airtbale api

首先,我是NodeJS的新手,并且想要让我的技能发挥得淋漓尽致。 我在Airtable中有一个表格,想要从中获取所有的元素。 用nodejs的airtable api很容易。 但是我想要做的是将这些元素推送并保存在未来的选项卡中(JSON,excel …)。 为了做到这一点,我使用callbaks,因为呼叫是asynchronous的..我听说了Promise,但对我来说这是非常新的,我几乎没有理解它..这是我现在的代码: var Airtable = require('airtable'); Airtable.configure({ endpointUrl: 'https://api.airtable.com', apiKey: 'keyKWYJPOEObWhNt2' }); var base = Airtable.base('app4qIwfmG0ZKAdBH'); var view = "Main View"; var tab = []; base('Table 1').select({ view : view}).eachPage(function page(records, fetchNextPage){records.forEach(function(record){ tab.push({ "Name": record.get('Name'), "Notes": record.get('Notes') }); }); fetchNextPage(); pushToArray(tab); }, function done (error){ if(error){ console.log(error); console.log(tab);} }); function […]

在同步一个内部等待asynchronouscallback函数

我用mysql2-node模块使用Express JS来创build一个访问MySQL数据库的函数 indexOfUserInVotingList : indexOfUserInVotingList: function (voteType, articleID, userID) { SQLconnection.connectToServer(); db = SQLconnection.getConnectionInstance(); let userIndex; switch (voteType) { case "upvote": db.query('SELECT upVoters FROM article WHERE article.idArticle = ?', [articleID], function (err, rows) { if (err) { throw err; } else { let upvoterArray = rows[0].upVoters; userIndex = upvoterArray.indexOf(userID); } }); break; case "downvote": db.query('SELECT […]

如何在NodeJS中使用Promises(Bluebird)处理条件callback

我目前正试图重构我拥有的代码库,并希望有一个更开发人员友好的代码库。 第一部分正在改变对Promise的callback。 目前,在一些地方,我们正在使用Async.waterfall来压扁callback地狱,这对我很有用。 其余的地方,我们不能是因为他们是有条件的callback,这意味着不同的callback函数里面的if和else if(x){ call_this_callback() }else{ call_other_callback() } 现在我在Node.JS中使用蓝鸟作为承诺,我无法弄清楚如何处理有条件的callback来压扁callback地狱。 编辑一个更现实的场景,考虑到我没有得到这个问题的症结所在。 var promise = Collection1.find({ condn: true }).exec() promise.then(function(val) { if(val){ return gotoStep2(); }else{ return createItem(); } }) .then(function (res){ //I don't know which response I am getting Is it the promise of gotoStep2 //or from the createItem because in both the different database is […]

nodejs循环async.parallelcallback

我正在testing一个由async.parallel函数调用的callback函数:如果callback函数使用参数或者没有,那么执行stream程似乎是不同的。 var async = require("async"); function makeTestFunction(i) { return function(callback) { console.log('test Function: '+i); return callback(); }; } function test(callback) { var endFunctions = function(i) { console.log('ending: ' + i); return callback(); }; var testFunctions = []; for (var i=0; i < 3; i++) { console.log('loop: '+i); testFunctions.push(makeTestFunction(i)); } return async.parallel(testFunctions, endFunctions ); } test( […]

节点asynchronous数组循环结果不符合预期

function asyncForEach(array,cb) { array.forEach(function(i){ setTimeout(cb(i),0); }); } asyncForEach([1,2,3,4], function(i) { console.log(i); }); console.log("After loop"); 上面的代码片段的结果,你会看到的是 1 2 3 4 After loop 我的预期是 After loop 1 2 3 4 我认为会发生的是函数asyncForEach将被添加到调用堆栈中,并且对于数组中的每个元素,setTimeout中的callback将被推送到callback队列。 Console.log(“After循环”); 将会被打印出来,然后调用堆栈将被清空,接下来所有的callback将被逐一执行。 但似乎并非如此。 谁能解释一下? 谢谢。

Node.JScallback函数没有被执行

settopending(f,fb)是第一个调用的函数,我不确定是否没有正确写callback函数,因为applytransaction(t,f,fb)永远不会被调用。 打印“第一”和“第二”,但不打印“第三”和“第四”。 我是否错误地设置了应该调用applytransaction(t,f,fb)的callback,还是有其他问题呢? function update(document,f,fb) { this.transactions.update( { _id: document._id, state: "initial" }, { $set: {state: "pending"}, $currentDate: {lastModified: true} } ); console.log("Second") } function settopending(f,fb) { console.log("First"); var t = this.transactions.findOne( { state: "initial" } , function(err, document) {//CALLBACK update(document,f,fb , function(err, document) {//CALLBACK console.log("Third"); applytransaction(document,f,fb); }); }); } function applytransaction(t,f,fb) { console.log("Fourth"); x=fb(t.value); […]

callback如何真的在节点js工作

下面是我的代码有两个callback和一个获取路线 app.get('/login', function(req, res, next) { res.sendFile(__dirname + '/public/views/login.html'); }); app.use(function (req, res, next) { console.log("first callback 1"); var err = new Error('Not Found'); err.status = 404; next(err); console.log("first callback 2"); }); app.use(function (err, req, res, next) { // set locals, only providing error in development console.log("second callback"); res.locals.message = err.message; res.locals.error = req.app.get('env') === […]