Bluebird - 承诺是在处理程序中创建的,但未从中返回

时间:2016-06-16 14:13:08

标签: javascript node.js mongoose promise bluebird

首先,我知道我必须n承诺避免这种警告。我还尝试按照建议here in the docs返回return。考虑一下这段代码,我在Mongoose的预保存挂钩中使用它,但我在其他地方遇到过这个警告:

null

我也尝试过(最初)这样:

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
});

但它也不起作用。哦,我必须提一下,我使用Bluebird:

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

不是A promise was created in a handler but was not returned from it的副本,这家伙忘了回信。

1 个答案:

答案 0 :(得分:3)

问题几乎完全是使用next回调,它调用创建promise而不返回它们的函数。理想情况下,钩子只需返回promises而不是回调。

您应该可以使用

来阻止警告
.then(function(result) {
    next(null, result);
    return null;
}, function(error) {
    next(error);
    return null;
});