Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 允许回调访问父函数数据的更好的设计模式_Javascript_Asynchronous - Fatal编程技术网

Javascript 允许回调访问父函数数据的更好的设计模式

Javascript 允许回调访问父函数数据的更好的设计模式,javascript,asynchronous,Javascript,Asynchronous,我正在使用async的eachSeries方法来获取RSS提要数组,然后构建一个对象来传递给async的瀑布方法(代码中没有介绍) 为了允许回调调用next()函数,并允许构建RSS提要数组,我将使它们在窗口对象上全局可访问 我忍不住觉得有一种更好的方法来设计它,而不必使用全金字塔,也不必使用最佳实践来避免变量冲突 代码如下: var async = require('async'); var parser = require('rssparser'); // let me know if yo

我正在使用async的eachSeries方法来获取RSS提要数组,然后构建一个对象来传递给async的瀑布方法(代码中没有介绍)

为了允许回调调用next()函数,并允许构建RSS提要数组,我将使它们在窗口对象上全局可访问

我忍不住觉得有一种更好的方法来设计它,而不必使用全金字塔,也不必使用最佳实践来避免变量冲突

代码如下:

var async = require('async');
var parser = require('rssparser');
// let me know if you would like me to post the rssFeeds array object

var numberOfItemsToScrape = 1

// receives the scraped data and builds the object
function loadData(err, data){
  var items = [];

  for (var i = 0; i <= numberOfItemsToScrape - 1; i++) {
    items.push(data.items[i])
  }

  feedToMutate.items = items

  rssFeedsToExport.push(feedToMutate)
  nextFunction();
}

// scrapes the data and passes it to a callback
function scrapeRss(rssFeed){
  parser.parseURL(rssFeed.url, parserOptions, loadData)
}

// calls async.eachSeries on the rssFeeds array
function scrapeRssAndLoadData(rssFeeds, cb){
  rssFeedsToExport = []

  async.eachSeries(rssFeeds, function(feed, next) {
    scrapeRss(feed);

    feedToMutate = feed
    nextFunction = next
  }, 
  function (err) {
    // when used in the context of the async.waterfall pattern, 
    // this will look like cb(null, rssFeedsToExport)
    console.log(rssFeedsToExport);
  });
}

scrapeRssAndLoadData(rssFeeds, cb)
var async=require('async');
var parser=require('rssparser');
//如果您想让我发布rssFeeds数组对象,请告诉我
var numberOfItemsToScrape=1
//接收刮取的数据并构建对象
函数加载数据(错误,数据){
var项目=[];

对于(var i=0;我想这是一个关于你在做什么的后续问题?是的,基本上我设计了一个工作模块,但某些东西感觉太粗糙或太不安全,以至于不能真正满意。在接下来的几天里,我可能会再发布一两次直觉上感觉不合适的模式/设计,并询问社区如果他们有一两个指针给我。哈哈,至少这是计划。我会考虑在你的工作的CoDeVIEW STACKExchange上张贴一个摘要,你可能会得到更多相关的反馈,如果没有错误的话,你可以做一些改进。哇,头脑发热。还没有真正意识到这样的STACKExchange存在。我会的。当然可以看看,考虑到我的问题的格式,它似乎更适合将某些东西粘贴到函数实例上,而不是全局。或者你可以在代码周围加上一个anon来防止全局。我想这是关于你在做什么的后续问题?是的,基本上我已经设计了一个工作模块,但某些东西感觉太粗糙或太不安全,无法真正满足。在接下来的几天里,我我可能会发布一个或两个模式,一个直觉地感觉不合适的模式/设计,询问社区他们是否有一个指针或两个给我。哈哈,这至少是计划。我会考虑在你的工作的CoDeVIEW STACKExchange上张贴一个摘要,你可能会得到更多相关的反馈,如果你能做到的话。这不是一个真正的错误。哇,令人震惊。我还没有真正意识到这样一个stackexchange的存在。我一定会检查一下,考虑到我问题的格式,它似乎更适合。你可以使用bind()将某些东西粘贴到函数实例上,而不是全局。或者你可以在代码周围加上一个anon来防止全局。我想这是关于你在做什么的后续问题?是的,基本上我已经设计了一个工作模块,但某些东西感觉太粗糙或太不安全,无法真正满足。在接下来的几天里,我我可能会发布一个或两个模式,一个直觉地感觉不合适的模式/设计,询问社区他们是否有一个指针或两个给我。哈哈,这至少是计划。我会考虑在你的工作的CoDeVIEW STACKExchange上张贴一个摘要,你可能会得到更多相关的反馈,如果你能做到的话。这不是一个真正的错误。哇,令人震惊。我还没有真正意识到这样一个stackexchange的存在。我一定会检查一下,考虑到我问题的格式,它似乎更适合。你可以使用bind()将某些内容粘贴到函数实例上,而不是全局。或者,您可以在代码周围使用anon来防止全局。