2017-12-27 2 views
1

Ich versuche, 2 Versprechen zu verwenden, hängt das zweite Versprechen von der ersten. Und ein 3 Versprechen hängt von beiden Versprechen ab. Aber als erstes Versprechen ausfällt bekomme ich diesen Fehler in der zweiten Versprechen:Nicht in der Lage, Versprechen Versagen innerhalb anderer Versprechen zu behandeln

UnhandledPromiseRejectionWarning: Unbehandelte Versprechen Ablehnung (Ablehnung ID: 2): Typeerror: kann Eigenschaft ‚Name‘ von null

Dies ist mein Code lesen:

var Asset = require('../models/index').Asset; 
var Price = require('../models/index').Price; 

var currency = req.params.currency; 

var values = { 
       where: { slugify_url: currency },      
      }; 

// get asset information 
var promisse_asset = Asset.findOne(values); 


// get prices information on this asset 
var promisse_prices = promisse_asset.then(function(asset) { 

    console.log(asset); // outputs null 
    // some processing 
    if (!!asset) { 
     ... 


}); 


return Promise.all([promisse_asset, promisse_prices]).then(function([asset, results]) { 
    ... 

Wie kann ich das beheben? Wie kann ich damit umgehen, wenn ich ein Asset in meiner Datenbank nicht finde?

+1

Sie scheinen einfach ein 'catch' (oder zweites' then' Argument) zu verpassen. Ohne es, Sie erhalten das _ "unbehandelt Versprechen Ablehnung" _ Fehler – Phil

+0

@Phil Ich legte einen Haken nach dem ersten Versprechen, aber es scheint, dass es nicht in den Catch-Zustand eintritt. Wie soll ich das machen? –

+1

Ah, so löst sich das erste Versprechen erfolgreich, nur mit einem "Null" -Wert. Sie sollten in diesem Fall einen Fehler ausgeben, damit das Versprechen fehlschlägt. Das müsste man in dem Versprechen "Promise.all" erwischen. – Phil

Antwort

1

Es gibt eine Situation, in der Sie Versprechungen versprechen und alle Ergebnisse erhalten möchten einschließlich abgelehnte mit Promise.all. Wie Sie das tun können, ist here (letzter Codeblock) erklärt.

Es gibt eine Situation, in der Sie ein ablehnendes Versprechen in der Warteschlange und nicht auf dem Stapel abfangen möchten, ohne Warnungen zu erhalten (die bald als veraltet gelten und Fehler erhalten). Wie Sie das tun können, wird erklärt here.

Oder Sie wollten nur ein Versprechen ablehnen, weil der Auflösungswert nicht dem entspricht, was Sie erwartet haben. Sie können wie von Phil geliefert oder Promise.reject("Something should not be null") zurückgeben.

Verwandte Themen