Je ne peux pas comprendre pourquoi je ne peux pas attraper cette erreur:Ember: attraper ne fonctionne pas avec Ember-données erreur FindRecord
Assertion Failed: You made a 'findRecord' request for a 'cart' with id '3ea1901a-56a9-11e7-a8f4-60e147bfe84c', but the adapter's response did not have any data
Ceci se produit lorsque vous essayez d'ajouter un élément à mon service de panier, mais il y a un problème avec l'API. Plus précisément, je suis en train de tester un scénario de sécurité dans lequel il existe une discordance de jeton avec l'API. L'API va renvoyer une réponse vide, ce qu'elle fait, mais je veux braquer catch
cette erreur et déclencher une fonction addItemToNewCart
.
Ceci est la méthode « ajouter »:
// cart methods
add(item) {
let self = this;
// get cart from API first. if this fails (in catch clause) a new one should be created
return this.get('store').findRecord('cart', get(this, 'cartObj.id')).then(response => {
console.log("RESPONSE", response.get('cartitems'));
// check if cart already has lineitem
let existingLineItem = response.get('cartitems').findBy('skuid', item.skuid);
if (existingLineItem) { // if item is already in cart, just add more
console.log("line item in response, adding quantity");
set(existingLineItem, 'quantity', parseInt(existingLineItem.quantity)+parseInt(item.quantity))
} else {
console.log("line item not in response, adding new");
response.get('cartitems').addObject(item);
}
// saving persists the cart back to API
response.save().then(newCart => {
set(this, 'cartObj', newCart);
});
}).catch(e => {
// this is not firing even though there is an error
console.log("problem with findRecord - create a new cart and add item to it", e.message);
self._addItemToNewCart(item);
});
},
Il semble que la promesse d'une certaine manière, les données de Ember résout avec succès, car les messages CONSOLE.LOG je dans le bloc then
sont en cours d'impression:
Je devine que findRecord
cherche d'abord localement, trouver le chariot, l'exécution du bloc then
et un async findRecord
arrive plus tard avec une erreur de l'API (trop tard pour le bloc catch), peut-être?
Si tel est le cas, comment puis-je dire, « attendre une réponse de l'API avant de faire quoi que ce soit et si la réponse est vide, appelez _addItemToNewCart
»?
je ferais this.store.findRecord (...). Puis (réponse => {// retourne un nouvel objet si la réponse répond à la condition}); –