Articles of asynchronous

asynchronous未定义 – 节点js

我试图得到nodejs的async工作,但我得到以下错误: ReferenceError:async没有在D:\ project \ routes \ index.js中定义:58:2在Layer.handle [作为handle_request](D:\ project \ node_modules \ express \ lib \ router \ layer.js:82:5 (D:\ project \ node_modules \ express \ lib \ router \ route.js:110:13)在Route.dispatch )在D:\ project \ node_modules \ express \ lib \ router \ index.js中的Layer.handle [作为handle_request](D:\ project \ node_modules \ express \ lib \ router \ layer.js:82:5):267 […]

NodeJs如何创build一个非阻塞计算

我试图让我的头在nodejs中创build一个无阻塞的重计算块。 拿这个例子(剥离其他东西): http.createServer(function(req, res) { console.log(req.url); sleep(10000); res.end('Hello World'); }).listen(8080, function() { console.log("ready"); }); 你可以想象,如果我同时打开2个浏览器窗口,第一个将等待10秒钟,另一个将按照预期等待20个。 所以,知道一个callback以某种方式asynchronous的武装,我删除了睡眠,并把这个: doHeavyStuff(function() { res.end('Hello World'); }); 与function简单定义: function doHeavyStuff(callback) { sleep(10000); callback(); } 这当然是行不通的…我也试图定义一个EventEmitter并注册它,但发射器的主要function有发射'完成'之前的睡眠,例如,所以一切都将运行阻止。 我在这里想知道其他人如何编写非阻塞代码…例如,mongojs模块或child_process.exec是非阻塞的,这意味着在代码中的某个地方,它们在另一个线程上分叉进程并听取其事件。 我怎样才能复制这个例如有一个漫长的过程呢? 我完全误解了nodejs范式吗? :/ 谢谢! 更新:解决scheme(有点) 感谢对Linus的回答,的确,唯一的办法是产生一个subprocess,比如另一个节点脚本: http.createServer(function(req, res) { console.log(req.url); var child = exec('node calculate.js', function (err, strout, strerr) { console.log("fatto"); res.end(strout); }); }).listen(8080, function() […]

Node.jsasynchronous函数*定义*

请,只是为了清除我脑海中的某些东西 我习惯于在库中使用asynchronous函数来编写,但是如何编写我自己的? 为了说明我的问题,我编写了一个名为“MadMathz”的模块, 我知道以下是asynchronous函数的示例用法: //load module var mM = require('./MadMathz'); //perform a function mM.async_function_addthree(12, function(result) { console.log(result) }); //do something straight afterwards console.log('Logging this straight after instead of waiting for computation'); 我知道该函数的第二个参数是callback,但是如何定义一个函数,如“async_function_addthree”? 我们假设为了这个例子的目的,async_function_addthree只是给第一个参数加3。 我只是把自己搞糊涂了,试图写出我认为可能的东西。 我完全在错误的轨道上? 我觉得我接近node.js,但这需要清理。 请解释,而不是在可能的情况下将其链接到某处。 我相信别人会从这个问题中受益。

如何等待所有节点stream完成/结束?

我有一个每24小时运行一次CRON的子节点进程。 当进程开始时,它会读取一些排队数据,并将该数据推送到某个转换stream。 这个stream然后作为一个逆多路复用器,并将stream分成多个stream,最终解决,但他们都是asynchronous的。 我需要终止所有这些stream完成后创build的subprocess。 我的问题是,你怎么知道什么时候所有的stream都完成了? 尝试: 我试图使用EventEmitter的“完成”事件,但似乎在第一个反向多路复用stream结束(这是一口:) :)时被捕获。 基于承诺的方法。 所以这种方法是有效的,但我认为有一个更简单的方法来做这样的事情。 基本上,这导致为每个反向复用stream水线创build一个承诺,当每个stream水线完成时,我们解决了这个承诺。 然后,当所有的承诺都已经解决了,一个事件被触发,我们在其他地方捕获这个事件来终止这个过程。

节点js +多个嵌套的内部函数与callback

我已经与单一函数(abcd)中的callback嵌套内部函数。 我需要使用asynchronous从外部调用abcd函数并返回响应。 var listFunctions = { test1 : function(objectData, callbackData) { //have logic and retrun data callbackData(null, "a"); }, test2 : function(objectData, callbackData) { //have logic and retrun data callbackData(null, "b"); }, test3 : function(objectData, callbackData) { //have logic and retrun data callbackData(null, "c"); }, test4 : function(objectData, callbackData) { //have logic and retrun data […]

从asynchronous获取蓝鸟承诺等待function

我正在寻找一种方法,使用Node v7.6或更高版本,在调用asynchronous函数时获取Bluebird Promise(或任何非本地promise)。 我可以这样做: global.Promise = require('Bluebird'); // Or Q/When var getResolvedPromise = () => Promise.resolve('value'); getResolvedPromise .tap(…) // Bluebird method .then(…); 请参阅: 我可以使用global.Promise = require(“bluebird”) 我希望能够做到这样的事情: global.Promise = require('Bluebird'); // Or Q/When var getResolvedAsyncAwaitPromise = async () => 'value'; getResolvedAsyncAwaitPromise() .tap(…) // Error ! Native Promises does not have `.tap(…)` .then(…); 我知道我可以随时使用这样的东西: Bluebird.resolve(getResolvedAsyncAwaitPromise()) .tap(…); […]

如何在Node.js中为非常大(> 1GB)的文件的每一行运行一个asynchronous函数

假设你有一个巨大的(> 1GB)loggingID的CSV: 655453 4930285 493029 4930301 493031 … 对于每个id您都希望进行REST API调用以获取logging数据,将其转换为本地数据,然后将其插入到本地数据库中。 你如何做到这一点与Node.js的可读Stream ? 我的问题基本上是这样的:你如何逐行阅读一个非常大的文件,为每一行运行一个asynchronous函数,并且[可选地]能够从特定行开始读取文件? 从下面的Quora问题我开始学习使用fs.createReadStream : http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js var fs = require('fs'); var lazy = require('lazy'); var stream = fs.createReadStream(path, { flags: 'r', encoding: 'utf-8' }); new lazy(stream).lines.forEach(function(line) { var id = line.toString(); // pause stream stream.pause(); // make async API call… makeAPICall(id, function() { // then […]

在NodeJS中同步less编译

我正在尝试为Browserify编写一个转换脚本,允许我使用require() .less文件。 转换将它们编译为CSS,然后将该缩小的CSS封装在一个将CSS附加到页面的小函数中。 我的麻烦是, 主LESS模块是asynchronous的,这似乎不是与转换脚本一起工作: lessify / index.js (直接从node-underscorifybuild模) var less = require('less'); var cleanCSS = require('clean-css'); var through = require('through'); module.exports = function(file) { if (!/\.css|\.less/.test(file)) { return through(); } var buffer = ""; return through(function(chunk) { return buffer += chunk.toString(); }, function() { compiled = buffer; if (/\.less/.test(file)) { compiled = less.render(compiled, function(e, […]

在Node.jsdevise模式中释放zalgo为什么asynchronouspath一致?

在我正在阅读的伟大的书籍NodeJs design patterns我看到下面的例子: var fs = require('fs'); var cache = {}; function inconsistentRead(filename, callback) { if (cache[filename]) { //invoked synchronously callback(cache[filename]); } else { //asynchronous function fs.readFile(filename, 'utf8', function(err, data) { cache[filename] = data; callback(data); }); } } 然后: function createFileReader(filename) { var listeners = []; inconsistentRead(filename, function(value) { listeners.forEach(function(listener) { listener(value); }); }); return […]

了解Node.JS使用async.waterfall如何执行外部函数

我需要使用async.js模块执行asynchronous函数。 但是当我执行外部函数时,我遇到了一些问题。 代码通过。 但是当我更改全局variables为本地variables,我不能设置使用参数。 var async = require('async'); var ogs = require('open-graph-scraper'); // global variables var param1 = {url: 'http://www.google.com/'}; var param2 = {url: 'https://www.yahoo.com/'}; function function1(callback){ ogs(param1, function(error, data1) { callback(null, data1); }); } function function2(data1, callback){ ogs(param2, function(error, data2) { callback(null, data1, data2); }); } function function3(data1, data2, callback){ console.log(data1); console.log("—————"); console.log(data2); } […]