Articles of asynccallback

一个实际的代码示例应该如何构造以避免callback地狱?

我一直在JavaScript代码中遇到callback地狱,我相信这是由我以前的经验主要是纯同步/线程Java代码。 我通过例子很好地学习,但到目前为止,还没有find一个很好的“之前和之后”的callback地狱的例子,在我发现它发生的许多情况下解决。 如果某种灵魂能够告诉我下面提供的代码应该是什么样的结构,以避免callback地狱(如果需要的话,使用asynchronous库等),我将不胜感激,因为我相信一个实际的例子会使我和其他人阅读这个问题。 在这一段时间里,我仍然无法find一个好的方法,可以调用原始的callback函数,也可以保留代码的逻辑。 任何帮助,如果很好的赞赏,谢谢你的时间。 🙂 代码:var fs = require('fs'); var zlib = require('zlib'); var defaultOptions = require('./options/defaults'); function FeatherDB (sourcePath, options) { if (options === undefined) { // use defaults if options not provided options = defaultOptions; } else { // ensure all keys are supplied for (key in defaultOptions) { if (options[key] === […]

产生asynchronous执行的JavaScript

我想用代码说明问题: var async1 = f1(params, cb); var async2 = f2(params, cb); 现在我可以通过瀑布asynchronous过程调用async1,如下所示: async.waterfall([ function(cb){ async1(params, cb); async2(params, cb); }, //default process function(result, cb){ //some code here and then cb(null, result); } ], done); 我的问题是我如何等待async1 donecallback,所以我可以调用async2 。 这两个任务都需要运行默认进程和完成callback。 如果有一种方法/devise模式,我可以运行async1和完成后,我可以在同一个瀑布asynchronous函数内运行async2 ? 这两个asynchronous函数都需要完成默认进程和完成callback。 谢谢。

在Nodejs中堆叠asynchronouscallback事件的最佳方法

我正在使用Node和NodeWebkit编写本地音乐stream应用程序。 在我的应用程序中,我扫描任何目录的音乐文件夹,加载专辑封面,然后在HTML中显示艺术。 但是,在每个asynchronouscallback结束时检测.forEach()迭代器结束的逻辑不会从开发人员的angular度来创build干净的代码。 从逻辑上讲,它的工作原理,但如果我要解开这串依赖关系,我不得不重写所有的依赖关系。 这是我的代码片段: // Fetch the music albums fs.readdir("./music", function(err, files) { if (err) { //return console.error(err); } //document.write(JSON.stringify(files)); // Look specifically for music album folders (directories) filterDirectories("./music", files, function(dirs){ dirs.forEach(function(dir, index, array){ fs.readFile('./music/' + dir + "/album.json", 'utf-8', function (err, data) { data = JSON.parse(data); if (err) { return console.error(err); } // […]

#9挑战 – 了解您的节点(asynchronouscallback)

我在这个特殊的挑战中挣扎着: 练习9 – 杂耍asynchronous 您必须收集每个URL提供给您的完整内容,并将其打印到控制台(stdout)。 您不需要打印出长度,只需将数据打印为string; 每个URL一行。 问题在于,你必须按照与作为命令行参数提供给你的URL相同的顺序打印出来。 这是我的代码: var http = require('http'); var bl = require('bl') var results = []; var count = 0 function getURLs() { var urls = [] for(var i = 2; i < process.argv.length; i++){ urls.push(process.argv[i]); } return urls } function getHTTP(url){ http.get(url, function(response){ response.pipe(bl(function(err,data){ if(err){return console.error(err)} results[count] = data.toString(); […]

返回数据一旦获取JavaScript

使用nodeJS。 我有一个主要的文件,调用一个Web刮板,出去几个链接,并从网站获取原始数据,然后下一行调用一个函数从网页刮板文件返回一个JSON对象到主文件。 但是,由于需要一点时间出去刮网站,返回正在返回一个空的对象。 在调用get方法之前,如何使用callback或其他方法来等待数据。 主文件 var test = require('web-scraper.js'); test.scrape(next); function next() { var json = test.getJSON(); } web-scraper.js(它使用模块导出并位于节点模块文件夹中) module.exports = { scrape: function(callback) { startScraper(callback); }, getJSON: function() { return JSON; } }; function startScraper(callback) { // Does web scraper stuff callback(); }

节点的JS如何从一个函数的callback函数访问全局variables?

我正在使用NodeJS进行事件捕获。 所有的电话都将来到getmefunction。 从这个函数我打电话getUserLocation()函数返回基于IP地理定位。 如何根据这个值更新全局variables? var getClientAddress = function (req) { return (req.get('x-forwarded-for') || '').split(',')[0] || req.connection.remoteAddress; } var getClientLocation = function (ipaddress, callback) { freegeoip.getLocation(ipaddress, function(err, location) { if (err) throw err; return callback(location); }); } var store = [{'hello': 'world', 'country': 'India', 'City': 'Indupur'}]; for (eve=0;eve<store.length;eve++){ if(!store[eve].lat){ clientIp = getClientAddress(req); getClientLocation("XXX:XX:XX:XXX", function(resp) { console.log(resp); […]

方法在完成函数执行之前返回值

function rip(intent_update, output_rnr){ var headers_conv = { 'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization': 'Basic YWFjZWU2M' }; var dataString = '{ "output": { "text": { "values": [' + output_rnr + '] } } }'; var options_conv = { url: 'https://watson-api-explorer.mybluemix.net/'+ intent_update + '?version=2017-05-26', method: 'POST', headers: headers_conv, body: dataString }; function callback_conv(error, response, body) { if (!error […]

Node.js – 打破callback函数并在父函数中返回true / false

我正在使用Node Express框架来构buildAPI,并遇到有关基本身份validationfunction的问题。 我需要运行SQL查询来检索有关用户的信息并validation他们的凭据。 查询完成后发生该问题。 SQL数据被发送到一个callback函数,如下所示。 我想要在callback中进行所有的validation,但是我想跳出SQLcallback并从express.basicAuth()函数返回true / false。 我已经尝试设置一个全局variables,然后在SQLcallback之外访问它,但是有时查询可能没有完成,直到获取访问该全局variables的块为止。 在此先感谢您的帮助。 var auth = express.basicAuth(function(user, pass) { // Query to select information regarding the requested user /* Query here to find the requested user's data */ client.query(query, function (err, rows, fields) { if (err) throw err; GLOBAL.sql = rows; /* I want to break out of […]

我有一个节点asynchronous函数的例子。 返回不是预期值的callback函数

我已经组成了以下示例来testingnode.js中的asynchronouscallback事件。 事实是,错误不是返回给我一个参数。 这是为什么? var maxtime = 1000; var evenDoubler = function(v, callback) { var waitTime = Math.floor(Math.random() * (maxtime + 1)); if (v%2) { setTimeout(function() { callback(new Error("Odd input")); }, waitTime); } else { setTimeout(function() { callback(null, v*2, waitTime); }, waitTime); } } for (i=1;i<=10;i++) { evenDoubler(i, function (error, result, waitTime) { if (error){ console.log(error […]

当收到Error对象时,如何停止函数?

如何在发生错误时停止function。 我正在做一个http后的通话。 我已经构造了一个错误优先风格的callback函数。 如果传入一个Error对象,如何停止callback函数? 在我的使用情况下,我需要停止,无论错误types,因为我需要的数据对象的后续链callback函数。 它是否简单地return ? 我已经阅读了更高层次上的回报,希望得到确认,如果我的代码是正确的,我想实现。 我只是想确保继续callback函数不会继续,因为他们不会传递任何数据对象,因此,都将是'错误' server.js var request = function(callback) { // HTTP call to server }, function (error, response, body) { if (!error && response.statusCode === 200) { // processed and created data object return callback(null, data) } else { console.log(error.stack) return callback(error) ; } }) }; var requestSync = […]