jquery承诺不解雇

时间:2017-01-27 15:37:05

标签: javascript jquery promise

加载此XML文件后,then函数未触发。我没有收到任何错误,我可以在网络选项卡中看到文件加载。我在这里做错了什么?

$.when(
    $.get("data/data.xml", {}, function (file) {
        xml = file;
    })
).then(function(){ 
    console.log("Loaded");
});

3 个答案:

答案 0 :(得分:3)

在这种情况下,为什么要使用this.aliasCtrl = formBuilder.control('', [], [(control: AbstractControl) => { return new Promise(resolve => { if(control.value === 'aaa') { resolve({error: true}); } else { resolve(null); } }); } ]); this.nameGroup = formBuilder.group({ firstName: formBuilder.control('', []), lastName: formBuilder.control('', []) }, { asyncValidator: (group: FormGroup) => { return new Promise(resolve => { if(group.value.firstName === 'aaa' && group.value.lastName === 'aaa') { resolve({error2: true}); } else { resolve(null); } }); } }); this.formGroup = formBuilder.group({ name: this.nameGroup, alias: this.aliasCtrl }); $.when方法会返回一个promise(或延迟),因此您应该可以直接在该方法上链接get

then

答案 1 :(得分:0)

我建议将jQuery推荐的回调函数用作here

  

jqXHR.success(),jqXHR.error()和jqXHR.complete()回调   从jQuery 3.0开始删除方法。 您可以使用jqXHR.done(),   jqXHR.fail()和jqXHR.always()改为

在您的情况下,您可以使用done()always()

如果你想成功执行。

$.get("data/data.xml", {}, function (file) {
        xml = file;
} ).success( function(){ 
    console.log("Loaded");
} );

如果您想在无论成功或错误的情况下执行。

$.get("data/data.xml", {}, function (file) {
        xml = file;
} ).always( function(){ 
    console.log("Loaded");
} );

答案 2 :(得分:-1)

在这种情况下,这是因为xml格式错误。看起来如果加载了xml但无法解析,则$ .get回调未被触发但不会引发错误。