Tag: asynchronous

在瀑布内节点asynchronous并行

我在Nodejs中构build一个服务器来从某个数据库检索数据。 我已经使用了asynchronous库了一段时间了,并想出了一些东西,例如把一个瀑布放在一个并行函数中。 我偶然发现了一个问题,我首先需要执行一个查询,然后在可以同时执行的其他查询中使用该查询的结果。 代码看起来像这样: async.waterfall([ function(callback) { connection.query( query, function(err, rows, fields) { if (!err) { callback(null,rows); } else { callback(null,"SORRY"); } } ); }, async.parallel([ function(resultFromWaterfall,callback) { connection.query(query, function(err, rows, fields) { if (!err) { callback(null,rows); } else { callback(null,"SORRY"); } } ); }, function(resultFromWaterfall,callback) { connection.query(query, function(err, rows, fields) { if (!err) { […]

asynchronous等待或承诺不返回stream事件

我有以下函数返回一个Promise函数参数是一个asynchronous函数: createObjectFrom(record) { const self = this; return new Promise(async (resolve, reject) => { let obj = {}; for(let i = 0, l = self.opts.transformers.length; i < l; i++) { let transformer = self.opts.transformers[i]; const headerIndex = findIndex(self.headers, (header) => { return header === transformer.column; }); let csvValue = record[headerIndex]; const lookUp = transformer.options.lookUp; const […]

有条件地执行callback

解决以下控制stream程的最佳方法是什么? 我只想调用getSomeOtherData如果someData等于某个值/通过一些条件testing 在这两种情况下,我总是想调用getMoreData http.createServer(function (req, res) { getSomeData(client, function(someData) { // Only call getSomeOtherData if someData passes some conditional test getSomeOtherData(client, function(someOtherData) { // Always call getMoreData getMoreData(client, function(moreData) { res.end(); }); }); }); });

通用包装协调functionasynchronous风格

我很想写一个通用的包装函数,并返回该函数的“asynchronous风格”版本, 如果它不是开始的asynchronous。 麻烦的是,没有简单的方法来知道这个调用是同步的还是asynchronous的。 所以…这基本上“不能做”。 对? (请注意,包装应协调同步函数为asynchronous风格,并单独离开asynchronous函数) var wrapper = function( fn ){ return function(){ var args = Array.prototype.splice.call(arguments, 0); var cb = args[ args.length – 1 ]; // ?!?!?!?!? // I cannot actually tell if `fn` is sync // or async, and cannot determine it! console.log( fn.toString() ); } } var f1Async = wrapper( function( […]

Nodejs与promise保持并行

我有这样的字典: {go: ['went', 'run'], love: ['passion', 'like']} 一个键的价值是它的同义词。 而'getSynonymWords(word)'是一个asynchronous函数,它返回一个promise,其值是与传递参数相对应的同义词列表。 我怎样才能循环通过对象recursion地获得另一个对象: {went: [], run: [], passion: [], like: []} 这是我的一段代码: function getRelatedWords(dict) { return new Promise(function(resolve) { var newDict = {}; for(var key in dict){ if (dict.hasOwnProperty(key)) { var synonyms = dict[key]; Promise.map(synonyms, function (synonym) { return getSynonymWords(synonym).then(function (synonyms) { newDict[synonym] = synonyms; return newDict; }); […]

节点JSasynchronousPromise.All问题

我试图从列表中的一堆项目执行asynchronous例程,但是我很难理解promise.all是如何工作的以及它做了什么。 这里是我现在使用的代码: /** * Queues up price updates */ function updatePrices() { console.log("~~~ Now updating all listing prices from Amazon API ~~~"); //Grabs the listings from the database, this part works fine fetchListings().then(function(listings) { //Creates an array of promises from my listing helper class Promise.all(listings.map(function(listing){ //The promise that resolves to a response from the routine […]

在Promise中处理错误,就像async / await语法中的stream程一样

我有一些问题需要处理“平行”的多重拒绝。 当我们“并行等待”时如何处理asynchronous函数中的拒绝。 这里是一个例子: function in_2_sec(number) { return new Promise((resolve, reject) => { setTimeout(() => { reject('Error ' + number); }, 2000); }) } async function f1() { try { let a = in_2_sec(3); let b = in_2_sec(30); return await a + await b; // awaiting in "parallel" } catch(err) { console.log('Error', err); return false; } […]

影响callbackvariables是不好的做法吗?

以asynchronousNode函数fs.stat()为例。 如果我需要在一个文件上使用fs.stat() ,那么稍后fs.stat() ,结果会被遮蔽。 fs.stat(file, function(err, stats) { fs.stat(file, function(err, stats) { }); }); errvariables以及statsvariables被隐藏起来 – 如果我不会在第二个callback中使用第一个callback,那么这个问题是否会发生? 重命名第二个callbackvariables是否更好? 是否覆盖这些variables,一次或多次对性能有什么影响?

Node.jsstreamAPI泄漏

在玩节点stream的时候,我注意到几乎所有的教程都教了一些东西: // Get Google's home page. require('http').get("http://www.google.com/", function(response) { // The callback provides the response readable stream. // Then, we open our output text stream. var outStream = require('fs').createWriteStream("out.txt"); // Pipe the input to the output, which writes the file. response.pipe(outStream); }); 但在我看来,这是一个非常危险的代码。 如果文件stream引发exception某个点会发生什么? 我认为文件stream可能会泄漏内存,因为根据文档,文件stream显然不接近。 我应该在乎吗? 在我的选项node.jsstream应该处理情况…

在forEach循环中保证

在一个Node应用程序中,我需要以同步的方式迭代一些项目,但循环内的一些操作是asynchronous的。 我的代码现在看起来像这样: someAPIpromise().then((items) => { items.forEach((item) => { Promise.all[myPromiseA(item), myPromiseB(item)]).then(() => { doSomethingSynchronouslyThatTakesAWhile(); }); } } 当这个items是1的数组的时候,这会有奇效。但是,一旦有多个项目, promise.all()就会立刻为数组中的每个项目开始,而不用等待循环中的操作结束。 所有这一切…如何确保数组中的每个项目的整个操作同步运行(即使某些操作是asynchronous并返回一个承诺)? 非常感谢! ñ