Tag: asynchronous

在这个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 […]

asynchronous运行三个函数,等待三个函数完成

在下面的函数start中,连续调用三个函数。 所有的函数执行完毕后,容器函数的start被再次调用。 有没有办法,我可以并行或asynchronous地运行这三个函数,当所有三个函数完成时,再次调用start方法。 function start(){ resolveErrorQueue((err,data)=>{ if(err) console.log(err); else{ checkIfAlive((err,data) => { if(err) console.log(err); else{ prepareServer((err,data) => { if(err) console.log(err); else start(); }); } }); } }); }

当每个函数结束时需要执行函数

我有节点js / firebase中的这个代码: ref.child("recipts").once("value", function(usersSnap) { usersSnap.forEach(function(reciptsSnap) { reciptsSnap.forEach(function(reciptSnap) { reciptSnap.ref.child("last_recipt").once("value", function(b) { b.forEach(function(c) { //Here I fill some "product" object }); }); reciptSnap.forEach(function(b) { //Here I fill some "product" object }); }); }); }); 当“reciptSnap”forEachs完成时,我需要执行一个函数。 我怎样才能做到这一点,我尝试使用variablesi ++和i–但只适用于每个迭代。 我调用的函数是用forEachs循环中的填充数据操纵我创build的产品对象。

如何迭代node.js中的promise数组?

在JavaScript中,我有一个非平面的Promise数组: const array = [ [ promise11, promise12.. promise1n ], [ promise21, promise22.. promise2n ], [ promise31, promise32.. promise3n ], … [ promisek1, promisek2.. promisekn ] ]; 如何以这样一种方式遍历数组,在下一个承诺数组将在前一个承诺数组解决之后才开始解决? 例如,我希望脚本等待[ promise11, promise12.. promise1n ]承诺[ promise11, promise12.. promise1n ]解决,然后调用下一个承诺数组。 我正在寻找一个通用的解决scheme,因为我的应用程序无法预先知道需要多less个调用(这是一个webscrapper)。

NodeJSasynchronouscallback不完成&呈现把手模板

我有一个Express GET请求,从Mongoose查询中提取数据,并且为每个返回的doc ,外部函数对作为x传递的每个doc执行计算,并返回结果,以便使用Handlebars将其呈现在前端。 理想情况下,我想进行calcA, calcB, calcC, calcD计算calcA, calcB, calcC, calcD然后在每个文档完成后,渲染test-env.hbs模板。 目前,当我打电话时,页面没有呈现,在日志中,一段时间之后,它显示GET /test-env – – ms – – ,可能是因为callback卡住了某处。 快速GET请求 var updates = require('./updates.js'); app.get('/test-env', function(req, res, next){ Market.find({"marketname" : 'To Win'}) .then(function(doc){ async.forEach(doc, function(x, callback){ updates.calcA(x); updates.calcB(x); updates.calcC(x); updates.calcD(x); }, function(err){ if(err) return console.log(err); res.render('test-env', {title: 'Test Page', items: doc}); }); }); }); 典型的calc函数 我想将returnA和returnB添加到docs数据中,以便在Handlebars中的{{#each}}expression式中呈现它 […]

如何在NodeJS / Express API中创build多个asynchronous标注

我需要将一组REST API抽象为一个简单的API来使用。 我正在计划创build一个简单的nodejs / express API,使得各个标注asynchronous,然后一次返回所有的结果。 JS场景变化很快,我所看到的很多信息似乎已经过时了。 我希望有人能给我一些build议,并指出我可能为这样一个场景设置的最佳实践或框架。

Promises + async.js

我总是阅读使用承诺与async.js不是一个好主意。 我想明白为什么。 我正在使用async.eachLimit来控制文件中asynchronous操作的限制,并承诺在完成所有asynchronous操作后返回结果。 例: const maxOfAsync = process.env.maxOfAsync || 500; return new Promise((resolve, reject) => { async.eachLimit(arrayOfFiles, maxOfAsync, (file, callback) => { callExternalLib(file).then((data) => { file.data = data; callback(); }).catch((error) => { callback(error); }); }, (error) { if (error) return reject(error); resolve(arrayOfFiles); }); }); 如果我不应该一起使用,如何达到相同的结果? 让我们忘记asynchronous/等待一分钟,然后返回只有Promises和async.js存在的日子。 我能做什么? 谢谢。