2016-06-16 2 views
2

Zunächst einmal weiß ich, dass ich return verspricht, diese Warnung zu vermeiden. Ich habe auch versucht, null wie vorgeschlagen here in the docs zurückgeben. Betrachten Sie dieses Stück Code, ich verwende es in Mongoose pre-save Haken, aber ich habe diese Warnung an anderen Orten erlebt:Bluebird - ein Versprechen wurde in einem Handler erstellt, wurde aber nicht von ihm zurückgegeben

var Story = mongoose.model('Story', StorySchema); 

StorySchema.pre('save', function(next) { 
    var story = this; 

    // Fetch all stories before save to automatically assign 
    // some variable, avoiding conflict with other stories 
    return Story.find().then(function(stories) { 

     // Some code, then set story.somevar value 
     story.somevar = somevar; 
     return null; 
    }).then(next).catch(next); // <-- this line throws warning 
}); 

Ich habe auch versucht, (zunächst) auf diese Weise:

 story.somevar = somevar; 
     return next(); // <-- this line throws warning 
    }).catch(next); 

Aber es funktioniert auch nicht. Oh, und ich habe zu erwähnen, dass ich Drossel:

var Promise = require('bluebird'), 
    mongoose = require('mongoose'); 

mongoose.Promise = Promise; 

kein Duplikat von A promise was created in a handler but was not returned from it, der Mann ein Versprechen zurückzukehren vergessen.

+0

Mögliche Duplikat [Drossel Unhandle Ablehnung Fehler von erfolgreichen Jquery Ajax POST] mit (http://stackoverflow.com/questions/33948597/bluebird-unhandled -rejection-error-von-erfolgreich-jquery-ajax-post) – TylerH

Antwort

3

Das Problem ist ziemlich viel mit einem Callback next überhaupt, die Funktionen aufruft, die Versprechen erstellen, ohne sie zurückzugeben. Im Idealfall versprechen die Hooks, die man nur zurückgeben muss, Versprechen, anstatt Rückrufe zu tätigen.

Sie sollten in der Lage sein, um die Warnung zu verhindern, indem

.then(function(result) { 
    next(null, result); 
    return null; 
}, function(error) { 
    next(error); 
    return null; 
}); 
+0

Es funktioniert, danke. Ich habe mich ein wenig geändert, um 'next (error);' aufzurufen, um den Fehler an Handler weiterzugeben. Ich verstehe nicht, was "die Haken sind, die man braucht, um Versprechen abzugeben, anstatt Rückrufe zu tätigen", wo kann ich darüber lesen? Je mehr ich schreibe Node.js + verspricht Code, desto weniger verstehe ich es: D –

+0

Ich meine, Mungo sollte seine API geändert haben, so dass Hooks einfach ein Versprechen zurückgeben könnten, anstatt einen "nächsten" Callback aufrufen zu müssen. – Bergi

Verwandte Themen