2016-03-04 94 views
3

所以我有2個承諾函數。當第一個函數出現錯誤時,我希望它顯示一條錯誤消息。當完成或失敗時,我希望他們執行一個finally catch all function,但由於某種原因,它不起作用。 我的代碼看起來是這樣的:AngularJS鏈接承諾,最後回調

// If our garment has a logo 
shared.logoExists(garment, model).then(function() { 

    // Save our panel 
    return shared.save(model); 

// If there was an error 
}, function() { 

    // Display an error message 
    toastr.warning(localization.resource.logoPlacementError.message); 

// Always close the library 
}).finally(function() { 

    // Reset our attachments 
    self.resetAttachment(); 

    // Hide our library 
    self.closeLibrary(); 
}); 

所以基本上我想要實現的是如果第一個函數調用失敗,它會顯示和錯誤。 當第二個函數失敗時,它不會執行任何操作。 但是,如果成功或失敗,它會一直關閉圖書館。

有誰知道我該如何做到這一點?

+0

我喜歡這個問題 - 我正在建立這個實際上 – Katana24

+1

什麼不工作?拋出任何錯誤? – charlietfl

回答

0

事實證明,我的方式正常工作。 logoExists功能不解決/拒絕所有應有的地方的承諾。當我解決這個問題時,我的代碼在上面工作。

1

你必須關閉功能,然後使用後.catch:

// If our garment has a logo 
shared.logoExists(garment, model).then(function() { 

    // Save our panel 
    return shared.save(model); 

// If there was an error 
}).catch(function() { 

    // Display an error message 
    toastr.warning(localization.resource.logoPlacementError.message); 

// Always close the library 
}).finally(function() { 

    // Reset our attachments 
    self.resetAttachment(); 

    // Hide our library 
    self.closeLibrary(); 
}); 
+0

不解釋爲什麼*「你必須使用catch」*。沒有什麼會被'catch'如此逼真地返回,這裏沒有太多有效的區別 – charlietfl

+0

承諾模式的結構化可能導致finally函數不被調用。只是想要嘗試的東西。而他的代碼結構的方式,他希望能夠確定是否有錯誤,因此捕捉功能。 –

+0

*「你必須使用」*和... *「試試這個」*之間的巨大差異。有很好的支持參數,用於使用catch而不是第二個參數,但是這裏沒有提到 – charlietfl