2017-09-15 7 views
2

Ich bin ein bisschen verwirrt mit diesen Versprechen Dinge und kann nicht verstehen, warum ich ein Versprechen nicht in ein anderes Versprechen zurückgeben kann. Mein Problem ist folgendes, ich habe eine Funktion speichern:JavaScript/Node.JS gibt ein Versprechen in einem anderen Versprechen zurück

save(Driver) { 
    this.exists(Driver).then(exist => { 
     if(exist) { 
      return new Promise(function (resolve, reject) { 
       if (exist === true) { 
        resolve(true); 
       } else if (exist === false) { 
        resolve(false); 
       } else { 
        reject(err); 
       } 
      }); 
     } 
    }); 
}; 

So einfach wie es ist, wenn ich versuche, diese Funktion aufzurufen, wie folgend:

save(driver).then(this.common.saveSuccess(res)) 
      .catch(this.common.noSuccess(res)); 

Ich erhalte eine Fehlermeldung, dass Cannot read property 'then' of undefined und ich kann nicht verstehen warum, weil ich ein Versprechen zurückgebe. Vielen Dank für die Hilfe

+0

Sie kehren nichts von 'save()'. 'this.exists (Driver) .then (...' Also, wo ist 'result' definiert? – Ryan

+0

ja sorry Ich habe versucht, den Code zu vereinfachen und vergessen Sie den Text zu ändern, habe ich behoben –

+0

Bitte beheben Sie es auch in der Frage . [edit] – Ryan

Antwort

1

Ihre save Funktion ist sehr kompliziert. Sie brauchen hier nicht verschachtelte Versprechen, kehren nur das Ergebnis (Versprechen) von this.exists Funktion:

save(Driver) { 
    return this.exists(Driver); 
}; 

Auch diese Funktion nicht ordnungsgemäß verwenden. save Funktion kann mit true oder false Werte aufgelöst werden, so müssen Sie diesen Wert in then Rückruf validieren und catch Rückruf für mögliche Fehler verwenden:

save(driver) 
    .then(exists => { 
    if (exists) { 
     this.common.saveSuccess(res); 
    } else { 
     this.common.noSuccess(res) 
    } 
    }) 
    .catch(err => // process error here); 
Verwandte Themen