Ich kann nicht erklären, warum ich diesen Fehler nicht fangen kann:Ember: fangen nicht mit glut-Daten Suchendatensatz Fehler arbeiten
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
Dies geschieht, wenn ein Element in meinem Warenkorb-Service hinzuzufügen versuchen, aber es gibt ein Problem mit der API. Insbesondere teste ich ein Sicherheitsszenario, bei dem ein Token nicht mit der API übereinstimmt. Die API wird eine leere Antwort zurücksenden, was sie tut, aber ich möchte ember auf catch
diesen Fehler und triggern eine addItemToNewCart
Funktion.
Dies ist die ‚add‘ Methode:
// 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);
});
},
Es scheint, dass irgendwie die glut-Daten Versprechen erfolgreich aufgelöst wird, weil die console.log Nachrichten, die ich im then
Block haben, sind gedruckt werden:
ich vermute findRecord
sucht zunächst lokal, den Wagen zu finden, die Ausführung des then
Block und einen Asynchron findRecord
kommt später mit einem Fehler von der API (zu spät für den Catch-Block), vielleicht?
Wenn das der Fall ist, wie soll ich sagen, „für eine Antwort von dem API warten, bevor etwas tun, und wenn die Antwort leer ist, rufen _addItemToNewCart
“?
ich tun würde this.store.findRecord (...). Dann (response => {hinzufügen // neues Objekt zurückgeben, wenn die Antwort die Bedingung erfüllt}}; –