Tag: asynchronous

如何在Mongoose虚拟属性中使用asynchronous代码?

我试图在不同的集合(而不是embedded的文档)中关联文档,而在Mongooose中有一个问题 ,我试图通过延迟加载关联的文档, mongoose网站 。 问题是虚拟的getter将函数作为参数,并使用virtual属性的返回值。 当虚拟机不需要任何asynchronous调用来计算它的值时,这是非常好的,但是当我需要进行asynchronous调用来加载其他文档时,虚拟机不起作用。 以下是我正在使用的示例代码: TransactionSchema.virtual('notebook') .get( function() { // <– the return value of this function is used as the property value Notebook.findById(this.notebookId, function(err, notebook) { return notebook; // I can't use this value, since the outer function returns before we get to this code }) // undefined is returned here as […]

Node.js Array.map()是asynchronous的吗?

我可以指望每次doSomething()被调用时都完成映射吗? nodeIDs = $.map(nodeIDs, function(n){ return n.match(/\d+$/); }); doSomething(nodeIDs); 我认为node.js中的所有callback都是asynchronous的? 我读过一篇关于一般编程的文章,callback可能是同步的,但我不确定node.js?

node.js模块:Async vs Fibers.promise vs Q_oper8

只是想知道是否有人可以给我比较这些模块之间的权衡处理asynchronous事件。 具体来说,我有兴趣知道使用Async而不是Fibers.promise的原因,目前我至less在我的testing代码中使用了它。 特别是,我在Fibers.promise中看到的一个主要优势是我可以保持堆栈链前端分叉,使得最终可以使用try { } catch { } finally ,并且还允许我确保在请求已经处理了响应结束。 有人使用Q_oper8吗? 我在另一个网页上发现了这个,只是想知道如果这已经死了,或者我应该检查一下。

Node.js请求获取ETIMEDOUT和ESOCKETTIMEDOUT的模块

我正在爬取与请求模块的许多链接与asynchronous模块的组合并行。 我注意到ETIMEDOUT和ESOCKETTIMEDOUT错误的很多,虽然链接是可及的,并且使用chrome快速响应。 我已经将请求选项中的maxSockets限制为2, timeout为10000。 我使用限制为2的async.filterLimit() ,每次甚至将并行性降低到2个请求。 所以我有2个套接字,2个请求,10秒的超时等待从服务器的标题响应,但我得到这些错误。 这里的请求configuration我使用: { … pool: { maxSockets: 2 }, timeout: 10000 , time: true … } 以下是我用于fecth链接的代码片段: var self = this; async.filterLimit(resources, 2, function(resource, callback) { request({ uri: resource.uri }, function (error, response, body) { if (!error && response.statusCode === 200) { … } else { self.emit('error', resource, error); […]

Node.js模块的asynchronous初始化

我想以asynchronous的方式初始化模块,并提出一些想法。 我需要数据库对象与从Mongo和其他数据的集合列表,但./中的文件列表将简洁起来。 我不能导出函数或类,因为我需要require('db')每次返回相同的对象。 首先也是最简单的是,将module.exports分配给Object并在以后填充它: var exports = {}; module.exports = exports; require('fs').readdir('.', function(err, files) { exports.error = err; exports.files = files; }); 不好的事情 – 我从外面不清楚列表是否准备好,没有好的办法来检查错误。 我EventEmitter 第二种方法是inheritanceEventEmitter并通知所有人数据库已准备好或发生错误。 如果一切正常 – 继续前进。 var events = require('events'); var util = require('util'); function Db() { events.EventEmitter.call(this); this.ready = false; this.files = null; this.initialize(); } util.inherits(Db, events.EventEmitter); Db.prototype.initialize = function() […]

NodeJS – 使while循环同步

我有一段代码 var page = 2; var last_page = 100; while(page <= last_page) { request("http://some_json_server.com/data?page=" + page, function (error, response, body) { if (!error && response.statusCode == 200) { store_data(body) } page++; }); } 我已经做了以下,但它实际上不检索任何东西。 我正确地做这个? var page = 2; var last_page = 100; while(page <= last_page) { var async_arr = []; async_arr.push( function(next) { request("http://some_api_url?page=" […]

node.js async.series是如何工作的?

var async = require('async'); function callbackhandler(err, results) { console.log('It came back with this ' + results); } function takes5Seconds(callback) { console.log('Starting 5 second task'); setTimeout( function() { console.log('Just finshed 5 seconds'); callback(null, 'five'); }, 5000); } function takes2Seconds(callback) { console.log('Starting 2 second task'); setTimeout( function() { console.log('Just finshed 2 seconds'); callback(null, 'two'); }, 2000); } […]

什么nodejs库最像jQuery的延期?

我已经成为了jQuery新的和惊人的Deferred模块的熟练用户,并且随着我使用更多的Node.js,我发现自己想要的东西就像我的Node.js编程中的大部分:阻止直到许多承诺都可以解决,随着任务复杂性的增加,可以自由地添加到数组中,例如当处理数据树时,数据树的大小在开始时不知道任务。 但是, node-fibers需要一个全新的可执行文件, Q()的接口只是令人困惑, node-step似乎只处理单任务同步。 有人只是将jQuery的Deferreds移植到节点就绪的表单中? 看起来似乎并不是这样,Deferreds似乎也不依赖于DOM可用的function,但我还没有find一个服务器端的等价物。

那么如何处理if-else呢?

在某些情况下,当我从一个promise对象中得到一个返回值时,我需要根据这个值的条件来启动两个不同的then() ,如: promise().then(function(value){ if(//true) { // do something } else { // do something } }) 我想也许我可以这样写: promise().then(function(value){ if(//true) { // call a new function which will return a new promise object ifTruePromise().then(); } else { ifFalsePromise().then(); } }) 但是有了这个,我有两个问题: 我不确定是否有一个好的主意来开始一个新的承诺 – 然后是一个承诺的过程; 如果我需要这两个过程在最后调用一个函数呢? 这意味着他们有相同的“terminal” 我试图返回新的承诺,以保持原来的链像: promise().then(function(value){ if(//true) { // call a new function which […]

Node.js 7.5上的“等待意外的标识符”

我正在尝试Node.js中的await关键字。 我有这个testing脚本: "use strict"; function x() { return new Promise(function(resolve, reject) { setTimeout(function() { resolve({a:42}); },100); }); } await x(); 但是,当我在节点运行它,我得到 await x(); ^ SyntaxError: Unexpected identifier 无论我是用node还是node –harmony-async-await运行它,还是在Node.js 7.5或Node.js 8(夜间编译)的Mac上的Node.js'repl'中运行它。 奇怪的是,相同的代码在Runkit JavaScript笔记本环境中工作: https ://runkit.com/glynnbird/58a2eb23aad2bb0014ea614b 我究竟做错了什么?