XML解析 - 承诺应该采取什么行动?

时间:2014-06-15 10:04:05

标签: xml parsing promise

我在xml解析器here上使用.promise()完成了一些帮助。如果将.promise()。done()与解析器函数结合使用,则此方法很好。但是,我真正想要做的是将解析器函数单独定义在顶部,然后在代码中执行它,并在其中应用promise()。done():

var xmlparse = function(){
  $.get("file.xml), {}. function(xml) {
     $('photo',xml).each(function(i){
       ...
       array filling
       .....
      });
   });
});

xmlparse().promise().done(function(){...

我已经了解到上述行并不起作用;我需要传递一个原始函数作用的对象。例如,如果xmlparse()正在更改div,我会说$(' div')。promise()。done()。但是,对于没有改变任何HTML结构的XML解析器,究竟可以传递什么呢? (这可以追溯到最初的解决方案;我很高兴它有效,但我不明白为什么。)任何帮助都值得赞赏。

1 个答案:

答案 0 :(得分:0)

使用promises链接事物的方法是.then,我们可以compose this ourselves on top of a callback API但在这种情况下我们不必这样做,因为$.get已经返回了一个承诺。

承诺的目的是让我们回到同步代码的理想属性(如返回和抛出),链操作的方式是通过.then mwrhos。

var xmlparse = function(){
  // we return a promise here
  return $.get("file.xml).then(function(xml) { // .then is used to continue
     $('photo',xml).each(function(i){
       ...
       array filling
       .....
      });
      return array; // returning from a `.then` will cause it to be the return value of 
      // the whole promise chain, promises compose. 
   });
};

现在,我们的xmlparse是一个承诺返回函数,所以我们可以这样做:

xmlparse().done(function(result){...
    // access result here
});

如果我们想将其链接到其他异步操作,我们可以将.then更改为.then并链接。