2017-06-21 5 views
1

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:

enter image description here

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“?

+0

ich tun würde this.store.findRecord (...). Dann (response => {hinzufügen // neues Objekt zurückgeben, wenn die Antwort die Bedingung erfüllt}}; –

Antwort

0

Konnten Sie die Antwort here

Grundsätzlich müssen { reload: true } zu den glühenden Kohlen-Daten finden Abfrage

+0

Eigentlich Ihr Thema sieht Sie wollen etwas anderes Antwort, jeder wie würde ich ermutigen, mehr auf api docs zu lesen. Das wird detailliertere Informationen als Guides haben. https://emberjs.com/api/ .. für Ihren Fall findRecord siehe https://emberjs.com/api/data/classes/DS.Store.html – kumkanillam