Articles of asynchronous

回送模型validation失败(asynchronous行为)

我试图validation一个模型,它的内容。 但是,由于回送自定义validation函数的结构,编程比简单stringvalidation更高级的逻辑相当困难。 Job.validate('job_definition, function(err){ //err(); //this will succeed in throwing error Job.app.models.anotherModel.findOne({where:{name:this.job_definition.toolName}}, function(error, tool){ if(tool.aProperty === this.job_definition.aProperty){ //err(); //this will not succeed, validation script will exit before err() is thrown } }); }, {message: 'this is malformed'}); 我怎样才能得到这个validationfunction,在退出之前等待?

节点asynchronous瀑布callback已被调用

我试图读取从asir.waterfall目录的一些文件,在我看来,我正在做的东西正确的,但我得到了指定的错误和readData函数从来没有被调用。 怎么了? var fs = require("fs"); var async = require("async"); var folder = "./files/"; try { async.waterfall([ function readDir(cb) { fs.readdir(folder, function(err, files) { cb(err, files); }); }, function loopFiles(files, cb) { files.forEach(function(fn) { console.log("loop " + fn); cb(null, fn); }); }, function check(fn, cb) { console.log("check "+fn); fs.stat(folder + fn, function(err, stats) { console.log(stats.isFile()); […]

在JS中做一个for循环等待一个库

如何创build一个for循环等待一个asynchronous调用完成之前开始一个循环的新的迭代没有库(如jQuery)? 例: var items = [1,2,3,4,5]; for (var i = 0; i < items.length; i++) { var promise = new Promise(function(resolve, reject){ asyncAPIcall({ body : item[i] }, function(error, response){ if(error) { reject(); } else { resolve(); } }); promise.then(function() { //continue loop }, function() { //break loop }); } 谢谢 更新(4/29) 我想到了这个解决scheme,我创build了一个自称的函数: var items = […]

事件循环为空或在超时后退出Node.js进程

我有一个Node应用程序做一些asynchronous的事情,我不能冒险的事情,许多模块之一做坏事,卡住,所以应用程序将永远不会退出。 (这只是在发送日志消息到服务时发生的。) 我不能直接使用process.exit ,因为无论有多less个asynchronous操作挂起,它都会终止。 尽pipe如此,我想尽快退出,所以这不会: function exit() { setTimeout(function() { process.exit(1); }, 10000); } 因为这将等待10秒,即使一切正常,1秒后所有的asynchronous事件结束。 我正在考虑检查如果事件循环是空的,除了这个计时器,然后退出。 这可能是通过一些无证的stream程方法来完成的,但是我更喜欢避免这样的黑幕。 任何想法更好的方法来解决这个问题?

如何按照数组内容的顺序执行async.map函数

我有下面的代码例程,很好用。 唯一的问题是,我需要的结果回来的links数组相同的顺序。 例如,我需要首先返回google.com链接的结果,然后是雅虎等。代码当前以“随机”顺序返回。 var Nightmare = require('nightmare'); var async = require('async'); var links = [ "http://www.google.com", "http://www.yahoo.com", "http://www.bing.com", "http://www.aol.com", "http://duckduckgo.com", "http://www.ask.com" ]; var scrape = function(url, callback) { var nightmare = new Nightmare(); nightmare.goto(url); nightmare.wait('body'); nightmare.evaluate(function () { return document.querySelector('body').innerText; }) .then(function (result) { console.log(url, result); }) nightmare.end(function() { callback(); }); } async.map(links, scrape); 更新:谢谢@christophetd。 […]

用Node,Express和google Analytics API在callback地狱中丢失

我在这里是初学者,所以我会尽我所能地揭露我的问题。 我试图在服务器端调用Google AnalyticsAPI,以在客户端显示一些数据,并使用d3和react。 这是我的脚本来调用GA API: var google = require ("googleapis"); var key = require ('./client_id.json'); const VIEW_ID = 'ga:80820965'; let jwtClient = new google.auth.JWT( key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/analytics.readonly'], null ); jwtClient.authorize(function (err, tokens) { if (err) { console.log(err); return; } let analytics = google.analytics('v3'); queryData(analytics); }); var queryData = function(analytics) { analytics.data.ga.get({ 'auth': jwtClient, 'ids': […]

在这个node.js函数中运行多个MySQL查询

我有这个node.js函数,它执行单个MySQL查询后返回一个Promise。 function deletePoint(PointObj, door_id) { return new Promise(function(resolve, reject) { try { var connection = jonMySQL.getMySQL_connection(); var mysql_query = '`DELETE FROM table1 WHERE user_id=? and door_id=?`'; var mysql_query_placeholder_arr = [PointObj.user_id, door_id]; connection.query(mysql_query, mysql_query_placeholder_arr, function(err, rows, fields) { if (err) { return reject(err); } else { resolve(rows); } }); } catch (err) { reject(err); } }); […]

节点FFI包装函数在同步使用时失败,但asynchronous工作

我试图用Node FFI来包装一个Rust库(暴露一个C API)。 我有以下代码包装两个函数。 一个是返回指针的“构造函数”。 另一个需要一个指针并返回Cstring。 var libcomm = ffi.Library('lib/c_api/target/debug/libcomm', { 'comm_address_for_content': ['pointer', ['string']], 'comm_address_to_str': ['string', ['pointer']] }); 当我使用comm_address_to_str的asynchronous调用时,响应是正确的。 但是,当我尝试使用同步样式调用该函数时,它将返回垃圾,或者非常非常less,正确的结果。 以下nodeunittesting将执行该场景: const comm = require("../").libcomm; exports.testAddressForContent = function (test) { const ptr = comm.comm_address_for_content('test'); const result = comm.comm_address_to_str(ptr); test.equal(result, 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'); // always fails console.log('sync', result); // random garbage comm.comm_address_to_str.async(ptr, function(err, result) { test.equal(result, 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3'); // […]

在使用Promise.all()forEach呈现NodeJS页面之前,先加载Firebase数据,

我试图创build一个从Firebase加载多个数据集的页面,然后将它们传递给NodeJS呈现的页面。 我会感谢一些帮助,确保在forEach迭代之后发生这种情况; 即,我不确定如何让Firebase for each迭代成为我的承诺的一部分。 非常感谢! router.get('/', function(req, res, next) { var getBrands = brandRef.once('value').then(function(snapshot){ var brands = []; snapshot.forEach(function(childSnapshot){ console.log(childSnapshot.val()['name']); brands.push({'name' : childSnapshot.val()['name'] }); }); return brands; }); var getStores = storeRef.once('value').then(function(snapshot){ var stores = []; snapshot.forEach(function(childSnapshot){ stores.push({'name' : childSnapshot.val()['name'] }); }); return stores; }); var getProducts = productRef.once('value').then(function(snapshot){ var products = []; snapshot.forEach(function(childSnapshot){ […]

同步mongoose请求

是否有可能在函数上下文中处理db.model.find()查询,并检索结果, 而不使用callback和承诺与mongoose库? 我需要保证,如果有一些用户存在于运行控制器的过程中,那么由于大量的相同操作(例如与数据库的通信),我不能将当前范围最小化为​​callback。 另外我想在我的项目中实现MVC模型,所以,我想保持在分离的文件的帮助器库(模块)。 这就是为什么我不想使用任何callback或承诺 – 他们将使事情复杂化,甚至更多的事情已经完成。 例如,我应该如何重写下面的代码才能成功执行(如果实际上是可行的话)(您可以忽略login模型和控制器 – 如果使用callback重写代码,它们被写成表示复杂性): user.js lib var db = require('./lib/db'); class User{ constructor(id){ //get user by id var result = db.models.user.findOne({_id: id}); //unsupported syntax in real 🙁 if(!result || result._id != _id) return false; else{ this.userInfo = result; return result; } } } module.exports = User; login模式 var user […]