Articles of asynchronous

是否try-catch-finally块在node.js中同步?

我有一些代码运行在一个节点程序中的subprocess ,如下所示: try{ var data = fs.readFileSync(urlPath, {"encoding":"utf8"}); } catch (err) { console.log("Error reading url file…"); throw err; } finally { console.log("File read!"); var array = data.split("\n"); console.log("Found " + array.length + " urls"); 这个代码是从另一个节点程序调用的,需要等到这个文件中的所有操作完成 。 不幸的是,在执行finally代码块之前的任何代码之前,subprocess正在以代码0退出。 这让我相信即使try-catch-finally也是asynchronous的。 那是对的吗?

用EventEmitter编写asynchronous函数

我是新的节点,并尝试在节点中使用asynchronous和事件行为优点。 我曾经从节点了解到,所有与Event对象一起处理的东西,都是asynchronous执行。 然后我试试这个,考虑下面的代码: var events = require("events"); var event = new events.EventEmitter(); event.on("work", function () { for (var i = 0; i <= 10; i++) { console.log("I do my work " + i); } event.emit("done"); }); var async = function (cb) { event.on("done", cb); event.emit("work"); for (var i = 0; i <= 10; i++) { […]

为什么等待不起作用的节点请求模块?

我是nodejs的新手。 我没有看到前1的反应,但我看到前2。为什么? 等待在其他地方为我工作,使用巴贝尔。 例1 let res = await request(url) console.log(res); console.log(res.body); 例2 request(url, function (error, res, body) { if (!error && response.statusCode == 200) { console.log(body) } }); 等待在其他地方工作,我使用babel和es6和es7function所需的模块。 例如,等待在squelize电话的工作,我validation。 但它不适用于请求调用。 为什么?

Node.JS加载模块asynchronous

我想有能力加载一个已经改变的模块。 我当然不得不先卸载模块 。 由于这是一个web服务器安装程序,我问是否有一种方法以asynchronous方式加载模块,以避免在更新文件的读取期间冻结web服务器。 一会儿Node.JS移除了require.async函数。 那么,在最新版本的Node.JS上,推荐的select是什么? 我应该先读取整个文件,然后使用Module库来parsing文件内容。 (而不是采取文件名读取和内部parsing的默认function)如何? 我应该把这个工作外包给一些开源库吗? 哪一个? 我应该写我自己的模块处理程序 – 我自己的requireAsync实现? (我知道该怎样。) 注意:除了加载asynchronous模块,我不想做任何事情,所以请不要build议我用新的web服务器路由框架来replace我的设置。

如何在Javascript中监听variables?

我一直在使用Node.js和CouchDB。 我想要做的是在一个对象内进行数据库调用。 这是我现在正在看的场景: var foo = new function(){ this.bar = null; var bar; calltoDb( … , function(){ // what i want to do: // this.bar = dbResponse.bar; bar = dbResponse.bar; }); this.bar = bar; } 所有这一切的问题是,CouchDBcallback是asynchronous的,“this.bar”现在在callback函数的范围内,而不是类。 有没有人有任何想法来完成我想要的? 我宁愿不要有一个处理程序对象,必须进行数据库调用的对象,但现在我真的很难与asynchronous的问题。

Node.js:你能使用stream内的asynchronous函数吗?

考虑以下: var asyncFunction = function(data, callback) { doAsyncyThing(function(data){ // do some stuff return callback(err) }) } fs.createReadStream('eupmc_lite_metadata_2016_04_15.json') .pipe(JSONstream.parse()) .on('data', asyncFunction) // <- how to let asyncFunction complete before continuing 如何知道什么时候asyncFunction已经完成? 有没有什么办法从stream内使用asynchronous函数?

JavaScript执行引擎未指定?

我最近开始学习JavaScript。 我一直在使用Node.js和Angular创build几个月的应用程序。 令我困惑的主要方面之一是如何在JavaScript中编写asynchronous代码,而不必担心线程同步 , 争用条件等问题。 于是,我发现了一些有趣的文章( [1] , [2] ),它们解释了如何保证我写的任何代码总是由单个线程执行。 底线,我所有的asynchronous代码只是简单的安排在事件循环中的某个点执行。 这听起来非常像操作系统调度程序将在一个单处理器的机器上工作,其中每个进程计划在有限的时间内使用处理器,给我们假的并行感。 而callback就像中断 。 这篇文章没有提供任何特定的参考,所以我认为JavaScript执行引擎工作的最佳来源当然应该是语言规范,所以我给了我最新的EcmaScript 5.1副本。 令我惊讶的是,我发现这个执行行为并没有在那里指定。 怎么来的? 这看起来像是在浏览器和节点中的所有JavaScript执行引擎中完成的基本deviseselect。 有趣的是,我还没有find一个地方,这是指定的任何特定的引擎。 事实上,我不知道人们是如何看待事情的方式,就像上面提到的书籍和博客那样,如此明确地肯定了这一点。 所以,我有一套我认为有趣的问题。 我将不胜感激任何提供见解,评论或简单参考的答案,指引我正确地理解以下内容: 由于EcmaScript没有指定JavaScript执行引擎应该与事件循环一起工作,所以JavaScript的实现似乎可以这样工作,不仅在浏览器中,而且在Node.js中呢? 这是否意味着我可以实现一个新的与EcmaScript兼容的JavaScript引擎,实际上它提供了真正的multithreadingfunction,如同步locking,条件等function? 使用事件循环的这个执行模型是否会阻止我利用多核,如果我想要执行一个强烈的CPU绑定任务? 我的意思是,我一定可以把任务分成几块(正如其中一篇文章中所解释的那样),但这仍然是连续的,而不是并行的。 那么,JavaScript引擎如何利用多核来运行我的代码呢? 你知道任何其他有信誉的来源,对于任何特定的JavaScript引擎实现的这种行为是正式指定的吗? 如果我们不能假设一些关于执行环境的东西,那么代码如何能够在库和引擎之间移植呢? 这个问题看起来太多了,或许这个post太宽泛,无法回答。 如果closures,我会试着用不同的线索问他们。 但是他们都是围绕这样一个事实,即我想更好地理解为什么JavScript和Node是用事件循环来devise的,如果在某处(除了浏览器源代码之外)指定了我可以阅读并深入理解devise和决策在这里,更重要的是,要确切地知道什么是写书的人的信息来源。

用蓝鸟承诺进行asynchronousexception处理

什么是处理这种情况的最佳方法。 我在一个受控制的环境中,我不想崩溃。 var Promise = require('bluebird'); function getPromise(){ return new Promise(function(done, reject){ setTimeout(function(){ throw new Error("AJAJAJA"); }, 500); }); } var p = getPromise(); p.then(function(){ console.log("Yay"); }).error(function(e){ console.log("Rejected",e); }).catch(Error, function(e){ console.log("Error",e); }).catch(function(e){ console.log("Unknown", e); }); 当从setTimeout中抛出时,我们总是会得到: $ node bluebird.js c:\blp\rplus\bbcode\scratchboard\bluebird.js:6 throw new Error("AJAJAJA"); ^ Error: AJAJAJA at null._onTimeout (c:\blp\rplus\bbcode\scratchboard\bluebird.js:6:23) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 如果throw在setTimeout之前发生,那么bluebirds […]

Async.js – 并行真的平行吗?

正如我迄今为止所理解的:Javascript是单线程的。 如果推迟某个过程的执行,则只需在该线程空闲时安排它(排队)以便运行。 但Async.js定义了两个方法: Async::parallel & Async::parallelLimit和我引用: 并行(任务,[callback]) 并行运行一组函数,而不必等到上一个函数完成。 如果任何函数将错误传递给它的callback函数 parallelLimit(任务,限制,[callback]) 与并行相同,只有在任何时候执行的最大“限制”任务才能并行执行任务。 就我对英语的理解而言,当你说:“并行执行任务”是指同时执行这些任务。 Async.js如何在单个线程中并行执行任务? 我错过了什么

asynchronousI / O和asynchronous函数有什么区别?

Node.js是一个asynchronousI / O。 这实际上是什么意思? 我通过产生另一个线程来创build一个asynchronous函数有什么不同之处呢? 例如 void asyncfuntion(){ Thread apple = new Thread(){ public void run(){ …do stuff } } apple.start() } 如果有差异,我可以在JavaScript中做一个asynchronousI / O?