我很困惑为什么有时候当我使用类的一个实例的一个实例与一个承诺的组合时,我会得到两种错误。如果我使用带有两个或三个链式承诺的Promise.all(),我有时只会在回调中得到一个未定义变量的错误。当我有一个包含多个属性和方法的复杂类时,如果我的类很简单,并且我只使用一两条链式承诺,我就可以使用.then()作为类的一个未定义的实例。有人知道为什么会这样吗?下面是我所针对的代码结构的一个示例:
(这些代码在最新的Firefox Nightly中正确执行,但在Chrome 47中没有执行)
'use strict';
class Controller {
constructor() {
this.data = 'data';
this.moredata = 'data';
this.evenmore = ['a', 'b', 'c'];
this.dataobj = {"a" : "1", "b" : "2", "c" : "3"};
}
}
//BLOCKED CODE
{
let cc = new Controller();
let loadeddata = null;
let xhr = $.getJSON('chapters.json', {}, (response) => {
loadeddata = response; //SOMETIMES IF CLASS IS COMPLEX IS NOT DEFINED (SOMETIMES IT IS)
}).fail(() => {
console.log('Failed to load JSON data!');
});
let xhr2 = $.getJSON('chapters.json', {}, (response) => {
loadeddata = response;
}).fail(() => {
console.log('Failed to load JSON data!');
});
let xhr3 = $.getJSON('chapters.json', {}, (response) => {
loadeddata = response;
}).fail(() => {
console.log('Failed to load JSON data!');
});
let xhr4 = $.getJSON('chapters.json', {}, (response) => {
loadeddata = response;
}).fail(() => {
console.log('Failed to load JSON data!');
});
//SOMETIMES WITH COMPLICATED CLASS WITH ONE OR TWO PROMISES DOES NOT THROW ERROR
Promise.all([xhr, xhr2, xhr3, xhr4]).then(() => {
console.log(loadeddata);
console.log(cc); //SOMETIMES CC IS NOT DEFINED (SOMETIMES IT IS)
});
}
发布于 2016-01-02 16:49:45
不返回标准承诺,因此您不应该对它们使用$.ajax (尽管可以),您可以使用$.when,这相当于jquery。而不是听失败或成功的每一次推迟/承诺,你可以听所有一次使用$.when
var xhr1 = $.getJSON('chapters.json');
var xhr2 = $.getJSON('chapters.json');
var xhr3 = $.getJSON('chapters.json');
$.when(xhr1, xhr2, xhr1)
.done(function(response1, response2, response3){
})
.fail(function(data, textStatus, jqXHR){ // first failed xhr
});(这些代码在最新的Firefox Nightly中正确执行,但在Chrome 47中没有执行)
它不工作在chrome 47和火狐夜间工作的原因是,ES6 classes还没有在chrome中得到完全的支持(它目前处于功能标志chrome://flags/#enable-javascript-harmony中)
https://stackoverflow.com/questions/34566095
复制相似问题