Tag: 竞态条件

这个fs.readdir函数中的竞态条件在哪里?

我想列出一个目录中的所有文件夹,并在结尾列出有多less个文件夹。 这是我的代码: fs.readdir(dir, (err, folders) => { if (err) return console.log(err); let count = 0; for (let i = 0; i < folders.length; i++) { let folder = folders[i]; fs.stat(dir + '/' + folder, (err, stats) => { if (err) return console.log(err); if (stats.isDirectory()) { console.log(folder); count++; } if (i >= (folders.length – 1)) { […]

竞争条件与文件加载

如果我通过命令行使用节点并需要模块,请使用load函数,然后使用get函数从configuration文件返回期望的string。 ➜ cz node > var config = require('./index.js'); undefined > config.load('/Users/xo/code/cz/config.json'); undefined > config.get() { username: 'xo' } > config.get('username') 'xo' 如果我通过文件尝试相同的事情,我得到undefined返回而不是{ username: xo } 。 ➜ cz node test.js undefined 这是test.js文件。 var config = require('./index.js'); config.load('./config.json'); console.log(config.get('username')); 这是我的模块。 'use strict'; const fs = require('fs'); let config = {}; module.exports = { load: function(path) […]

下面有什么比赛条件吗?

我在我的快递服务器中有下面的代码(为了简洁起见,请把它剪下来)。 我有一个共同的对象,我正在添加/修改/阅读三个不同的宁静的终点。 由于nodejs中的所有http请求都是asynchronous的,所以我可以同时获得请求和请求。 所以,虽然PUT发生,但让我们说状态不更新,我的GET可以得到一个稍微陈旧的回应? 根据我的理解,我的testing显示这里没有竞争条件。 因为更新results对象是一个同步操作,所有的asynchronous操作应该等待它。 有人可以帮助更好地解释这是否正确? var obj = {}; const exec = require('child_process').exec; app.post('/foo', (req, res) => { var result = {}; result.id = generateSomeRandomId(); result.failed = 0; result.status = 'running' //execute some command and update result const child = exec('some command'); child.stdout.on('data', (data) => { //some logic }); child.stderr.on('data', (data) => { […]

如何更新mongodb数组项没有竞争条件?

我有一个更新查询,certificate是受竞争条件,但我不知道为什么。 假设我在MongoDB中有一个stuff集合。 为了清晰起见,我使用了数字ID。 stuff: { _id: 123 elements: [ { _id: 456, value: 'foo', }, { _id: 789, value: 'bar' }, ] } 现在我想更新123下的element 456的值。 我认为这是好的(我使用mongoose,因此Stuff类): Stuff.update( { _id: 123, 'elements._id': 456 }, { $set: { 'elements.$': { _id: 456, value: 'foobar', something: 'else', } } } ) 然而,这个查询似乎受竞争条件的影响。 我不能解释为什么,但我可以certificate,并行解雇这个请求会弄乱我的数据。 特别是如果我尝试同时更新元素456和789 。 是否有一个全面的原因,为什么这会造成麻烦? 有没有办法来解决这个问题,所以它变得兼容certificate? 谢谢 […]

node.js代码是否会导致竞态条件?

从我读到的内容来看,当不同线程尝试更改一个共享variables时会出现竞争条件,这可能会导致一个值,这些线程执行的任何串行顺序都是不可能的。 但是node.js中的代码运行在单个线程中,那么这是否意味着在node.js中编写的代码没有竞争条件?