Tag: asynchronous

asynchronous控制stream – 完成for循环后返回true

我在Node.js中有以下方法: var foo = function(items){ for (var i=0; i<items.length; i++){ var item = items[i]; bar(item); } return true; } 我想在所有酒吧完成更新后,foo返回true。 我怎么做? 编辑:我正在寻找一种方法来做到这一点,如果可能的话没有任何外部库。

如何把不同的请求的响应放在与nodejs相同的文档中并请求?

嗨,我想把不同的请求的反应在同一个文件。 我有这个文件: var result = {google:"", twitter:"", facebook:""} 我想对这些网站(google.com,Facebook.com,twitter.com)做不同的GET请求,并把所有的结果放在通讯录中。 我尝试了嵌套的callback,但这样我必须先做谷歌调用,然后像这样的微博等: Request({ url:first_url, },function(err, response, body) { if (err) { request.log(err); }else{ risultato.google = body; Request({ url:second_url, },function(err, response, body) { if (err) { request.log(err); }else{ risultato.facebook = body; Request({ url:third_url, },function(err, response, body) { if (err) { request.log(err); }else{ risultato.twitter = body; console.log(result); } }); […]

如何处理客户端nodejs的asynchronous请求?

我是NodeJS的新手。 我在服务器端使用NodeJS。 我试图做一个简单的基于REST的GET请求,它从用户接收search参数searchvar ,并返回在JSON数组中find的匹配logging。 我的服务器代码如下: var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); var ObjectId = require('mongodb').ObjectID; var url = 'mongodb://localhost:27017/mydb'; app.get('/search', function(req, res) { res.set({ 'content-type': 'application/json; charset=utf-8' }); res.header("Content-Type", "application/json; charset=utf-8"); res.charset = 'utf-8'; var searchvar = req.query.searchvar; if(searchvar != null) { var recordsArray = […]

迭代asynchronous函数

我有一个使用模块cherio从网站获取数据的function。 现在我想通过关键字数组遍历这个函数,在一个名为stats的数组中收集中间结果,最后通过console.log()将stats数组的结果打印到控制台。 每当我运行这个脚本时,它会很快触发asynchronous函数并打印一个空的stats数组。 现在我的问题:我如何等待asynchronous函数完成,以便我可以打印数组到控制台,当它填充/完成。 我search了很多,search堆栈溢出。 似乎有很多方法可以实现我的目标,但是在这个节点中最习惯的方式是什么呢? 这是我解决这个问题的方法: var request = require("request"), cheerio = require("cheerio"), base_url = "http://de.indeed.com/Jobs?q="; // after equal sign for instance: sinatra&l= /* search syntax: – http://de.indeed.com/Jobs?q=node&l=berlin&radius=100 – – */ // // var search_words = ["django", "python", "flask", "rails", "ruby", "node", "javascript", "angularjs", "react", "java", "grails", "groovy", "php", "symfony", "laravel" ]; var counter […]

NodeJS Addon从NAN内部调用JavascriptcallbackAsyncWorker :: Execute

我想从我的asynchronous附加函数中调用nodejscallback。 我已经看到了同步的例子( 在这里 ),我正在使用一个奇妙的asynchronous例子( 在这里 )作为一个起点。 但是,当我尝试执行给c ++ AsyncWorker子类的callback时,出现分段错误。 这是我的代码: #include <nan.h> #include <functional> #include <iostream> #include <exception> using namespace Nan; using namespace v8; using namespace std; class ScriptWorker : public AsyncWorker { public: ScriptWorker(Callback *callback, const std::map<std::string, Callback*>) : AsyncWorker(callback), script(script), cbs(cbs) {} ~ScriptWorker() {} void Execute () { // ———————— // Segmentation fault […]

在主程序之前在lambda中加载S3文件

我正在写一个lambda函数,需要加载一个存储在S3中的密钥。 它不会经常改变,所以我宁愿不要每次调用lambda函数都抓住它,所以我想在容器被启动时加载一次,然后在lambda容器的生命周期中保存该值。 但是,由于asynchronous方法getObject,这导致了一个问题,因为在运行main module.export代码时(特别是如果这是第一次运行并且正在创build容器),文件可能未被加载。 我已经使用setTimeout实现了一个解决方法,但是我想看看这个推荐的方法是什么,而且我的方法有什么问题,因为它感觉不对! 示例代码: var AWS = require('aws-sdk') var s3 = new AWS.S3(); var fileLoaded = false; var params = { Bucket: 'bucket-name', Key: 'file-name' }; s3.getObject(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else { console.log('File loaded from S3'); fileLoaded = true; } }); exports.handler = (event, context, […]

在Promise返回函数中find第一个成功

给定一些function,返回承诺: function foo(arg) { return new Promise(function(resolve, reject) { if (stuff(arg)) { resolve('result from foo'); } else { resolve(null); } }); ); // … maybe more of these functions … function bar(arg) { return new Promise(function(resolve, reject) { if (otherStuff(arg)) { resolve('result from bar'); } else { resolve(null); } }); ); 我们怎样才能以串行方式迭代函数,在第一个函数返回一个非空值之后短路呢? [ foo, // […]

如何从外部函数访问数组?

我是新来的asynchronous编程 function loadPlugin(plugins, callback) { let tests = [[], [], []]; plugins.forEach((plugin) => { f.isPlugin(plugin, (exists) => { if (exists) { if (!f.pluginIsLoaded(plugin)) { tests[0].push(plugin); f.loadPlugin(plugin); } else { tests[1].push(plugin); } } else { tests[2].push(plugin); } }); console.log(tests); }); return tests; } 和 module.exports.isPlugin = (plugin , callback) => { fs.access(`./plugins/${plugin}`, fs.constants.F_OK, (err) => { […]

asynchronous编程如何影响对象的属性

我有一个用户对象,看起来像这样: { name: "john", cart: [1, 2, 3] } 这个对象被发布到我的express.js web应用程序。 在特定的路由上,很多中间件作用于该对象,并且还被发回给用户。 问题是一些在用户上操作的中间件是asynchronous的,并且修改了用户对象。 此外,我尝试尽快发回用户对象的响应。 鉴于Javascript使用共享呼叫,我不知道该对象会发生什么,因为它的属性被asynchronous函数(可能在对象被发回之前)修改。 这是我正在谈论的。 // This would be called after a post request app.use(function (req, res, user) { asyncSaveCartInDataBase(user, function (user) { // Just an example user.cart.push('things') }) user.cart = [] res.json(user); }); 在这里, asyncSaveCartInDataBase ,它需要用户完整的,未修改的cart属性。 但是,为了尽快发回服务器的响应(因为user.cart将始终是一个空数组),我将user.cart设置为一个空数组,并立即将其发回。 如果JS做了一个对象的副本,我不用担心,但它不,所以我不知道什么时候user.cart的价值是什么,当涉及到asyncSaveCartInDataBase的callback。 有没有一种方法来使用JS和节点的asynchronous性质来更改user.cart属性,并立即发回,而不修改它在asynchronous函数中使用的属性。 我需要做一个很深的克隆吗?

节点文件行数

我得到的反馈是,这个节点函数在获取文件的行数方面有性能问题,但是还没有能够精确定位细节。 function countFileLines(filePath){ return new Promise((resolve, reject) => { let lineCount = 0; fs.createReadStream(filePath) .on("data", (buffer) => { buffer.forEach((chunk) => { if (chunk === 10) lineCount++; }); }).on("end", () => { resolve(lineCount); }).on("error", reject); }); }; 在Node中获取文件的行数是否有更高性能的方法?