Tag: asynchronous

将一组函数asynchronous传递给一个数组

所以我有一个四个JSON对象的数组,我想添加三个新的字段到这些对象的每一个。 要做到这一点,我有一个asynchronous函数添加每个新的字段。 理想情况下,我想要做的就是将asynchronous函数限制为只有两个更新。 然后在最后callback原始函数并打印出新形成的数组。 但我不能得到这个工作,虽然我觉得我很接近… var async = require('async'); // My Array of JSON objects var allIssues = [ { id: '1', color: 'blue' }, { id: '2', color: 'red' }, { id: '3', color: 'gold' } ]; addExtraFeaturesToEachissue(allIssues, function(data) { console.log(data); }); function addExtraFeaturesToEachissue(allIssues, callback) { async.each( allIssues, async.applyEach([addheight, addWidth, addWeight]), callback(data) ); } […]

当使用asynchronous等待,如何指定一个callback?

我正在研究如何在以下方面使用交易: https://node-postgres.com/features/transactions 但在下面的代码示例中: const { Pool } = require('pg') const pool = new Pool() (async () => { // note: we don't try/catch this because if connecting throws an exception // we don't need to dispose of the client (it will be undefined) const client = await pool.connect() try { await client.query('BEGIN') const { rows […]

等待每个承诺后继续循环完成

下面我有两个function。 其中一个回报是一个承诺,我希望在每一个循环等待它先完成,然后移动一个。 正如你在下面看到的结果是不是所需/同步。 我应该不使用async.forEachof function test(num, callback) { console.log("inside function: "+num) return new Promise((resolve, reject) => { my.promise(num).then(() => { console.log("done: "+num) resolve(callback); }).catch(e => console.error(e)); }).catch(console.error); } function start_function() { //stuff async.forEachOf(arr, function (itm, i, callback){ console.log(i) test(i, callback).catch(e => console.error(e)); }, function (err) { console.log("ALL DONE") }); } 结果: 0 inside function 0 […]

节点:等待python脚本运行

我有以下代码。 我在哪里上传文件,然后我读取文件和console输出console.log(obj) 。 但是回应是第一位的,Python脚本在幕后运行。 我如何使代码等待python脚本运行,然后继续? router.post(`${basePath}/file`, (req, res) => { //Upload file first PythonShell.run('calculations.py', { scriptPath: '/Path/to/python/script' }, function (err) { console.log(err); let obj = fs.readFileSync('Path/to/file', 'utf8'); console.log(obj); }); return res.status(200).send({ message : 'Success', }); }); 我不能得到console.log(obj); 输出,因为它在响应之后运行。 我怎样才能让它等待python脚本运行并获得console.log(obj)输出。

Node.js中的POST正文和一些asynchronous条件检查

我想从http.ServerRequest获取请求(POST)主体,但是当我的请求函数被调用时,请不要直,而是在一段时间之后(Redis查询)。 我有一个非常简单的例子来说明: var http = require('http'), sys = require('sys'); http.createServer(function (req, res) { sys.puts("Got request"); req.pause(); setTimeout(function() { // In real code I'm accessing Redis here. var body = ""; req.addListener('data', function (chunk) { sys.puts("Got 'data' event"); body += chunk; }); req.addListener('end', function () { sys.puts("Got 'end' event"); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(body); }); req.resume(); }, […]

将数据注入asynchronouscallback(使用node.js)

我正试图围绕如何使asynchronous编程工作。 在我目前的使用情况下,我有可能被调用的函数每秒多次,他们有callback,依靠多个variables之间可能会改变。 一个简单的例子:(为了简洁起见,使用coffeescript) doSomething = (requestor, thing, action, callback) -> thing.takeAction action, (result) -> # actually a lot of times this nests down even further requestor.report result callback result 如果在thing.takeAction返回其结果之前doSomething被多次调用不同的数据, 我认为我不能依赖于请求者和callback仍然是我需要它们的相同的东西。 正确? 为了避免这种情况,我需要以某种方式将请求者和callback注入takeAction的callback函数。 这有可能吗? 我有这样的想法 doSomething = (requestor, thing, action, callback) -> thing.takeAction action, (result, _requestor = requestor, _callback = callback) -> _requestor.report result _callback […]

NodeJS – 强制用户等待全局事件完成

我有一个节点服务器,执行以下操作: 我有一个外部服务器的URL列表,称之为URLServer。 当用户点击我的NODE服务器时,我的节点服务器向URLServer发出请求并获得20个URL的列表。 只要我们获得了这20个URL,我想让我的节点服务器去获得每个URL的标题,这意味着我将获取URL并创build一个DOM,然后提取标题,我也获得其他数据,所以这是它必须完成的方式。 一旦我这样做了,我想要的URL和URL的标题保存在内部存储器和/或数据库。 所以我有一个URLcaching和一个标题caching(我不想总是抓取URL)。 我有这样的事情:如果(URLcaching为空)从URLServer获取URLS并caching这些URL 然后我想检查每个URL,看看他们的标题是否在我的caching中,所以我这样做:对于每个URL如果标题caching[URL],其他获取网站,创buildDOM,提取标题+其他数据和caching 这对于一个用户来说效果很好,但是当我在服务器上尝试一个很重的负载时,服务器就会挂起。 我得出结论服务器挂起的原因如下: 用户1请求 – 空的高速caching – 获取URL并完成获取URL的内容用户2请求 – 由于用户1的请求尚未完成,所以对于该用户来说,高速caching仍为空。 因此,用户2再次强制取回URL和它们各自的内容。 用户3请求 – 用户1和用户2请求尚未完成,所以相同的问题… 因此,假设我有10个URL需要提取,而不是打开10个连接,每个URL一个,然后caching数据,如果我有20个用户在同一时间点击服务器,我将打开200个连接(每个用户打开10个连接)。 如何阻止用户X(其中X> 1)导致这些事件? 我基本上希望服务器closures一个门,并要求每个用户等待,直到它已经填充caching,然后打开门,一旦这些填充,有没有办法做到这一点?

从多级JSON(使用async.js)recursion创build目录

定义 File#createDirectoriesFromJSON (json, cb); json:JSON对象。 cb:function。 参数:error(Error),created(布尔值,如果至less有一个目录已经创build,则为true)。 假设File类包含一个名为_path的属性,其中包含一个目录的path。 用法 var json = { b: { c: { d: {}, e: {} }, f: {} }, g: { h: {} } }; //this._path = "." new File (".").createDirectoriesFromJSON (json, function (error, created){ console.log (created); //Prints: true //callback binded to the File instance (to "this"). Hint: cb […]

Node.JS:forEach vs for循环asynchronous性质

for(var i=0;i<50;i++) { functionWrappingAsycfuncs(i) } var nums = [0,1…50] nums.forEach(functionWrappingAsyncfuns) functionWrappingAsycfuncs(i){ readFileAsync(i,function(){ console.log(i); }); } 在上面的函数中,在for循环中运行它的预期性质是50 50次? 但随着forEach它logging1 2 3 …. 这两个实现看起来都一样,但是确实有不同的任务第一个函数调用所有asynchronous函数,0到50作为参数,但并不等待callback完成 但第二个(在我的项目之一)似乎等待callback,并继续在数组中的下一个项目? 他们都一样吗?

是否可以在nodejs中使用一些同步代码

我明白,对于I / O操作(即数据库查询,Web请求和磁盘访问),您必须使用这样的callback fs = require('fs') fs.readFile('test.txt', 'utf8', function (err,data) { if (err) { return console.log(err); } console.log(data); }); 但是要说你是否有这样的代码同步 function Player(name){ this.name = name; this.score = 0; } Player.prototype.calcScore = function(){ //some special code here to calculate the score this.score =+ 10; } var player = new Player("Sam"); player.calcScore(); console.log(player); 或者,你需要写在像下面这样的callback风格,calcScore方法只包括一个for循环和一个if语句,不会查询数据库等。 function Player(name){ this.name […]