所以這個錯誤實際上並沒有涉及承諾,而是依賴性加載的時間。我們使用LAB.js作爲文件加載器。 LAB.js支持JavaScript依賴關係的「鏈式」加載機制。
發生了什麼事情是我們沒有發佈的鏈條有兩個是相互關聯的。這兩個鏈是異步加載的,因此,在運行JavaScript文件時,有機會嘗試使用未加載的對象。
問題的癥結在於Angular.js 1.2.13在這種情況下悄然失敗。折角服務和異常從未傳播到更高級別的代碼的加載過程中出現的異常也沒有任何調試說它擊中了一個例外:
function getService(serviceName) {
if (cache.hasOwnProperty(serviceName)) {
if (cache[serviceName] === INSTANTIATING) {
throw $injectorMinErr('cdep', 'Circular dependency found: {0}', path.join(' <- '));
}
return cache[serviceName];
} else {
try {
path.unshift(serviceName);
cache[serviceName] = INSTANTIATING;
return cache[serviceName] = factory(serviceName);
} catch (err) {
if (cache[serviceName] === INSTANTIATING) {
delete cache[serviceName];
}
throw err;
} finally {
path.shift();
}
}
}
的throw err
上面沒有打通到瀏覽器,是在系統中的某個地方被捕獲並「被忽略」。
一旦我們發現了這個異常,就很容易跟蹤鏈加載問題。
只是放棄這個:https://github.com/tildeio/ember-extension/pull/76它仍然是在製品,但它應該是可用的。也就是說,你也可以調試庫代碼。 –
@FlorianMargaine這個擴展是針對Amber的,而OP則指的是AngularJS和jQuery的實現。我錯過了什麼嗎? –
@EliranMalka它的承諾。它是由Ember的開發人員完成的,但它對承諾是通用的。 –