我在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解析器,究竟可以传递什么呢? (这可以追溯到最初的解决方案;我很高兴它有效,但我不明白为什么。)任何帮助都值得赞赏。
答案 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
并链接。