Javascript 蓝鸟返回承诺丢失警告

Javascript 蓝鸟返回承诺丢失警告,javascript,node.js,promise,q,bluebird,Javascript,Node.js,Promise,Q,Bluebird,我使用了下面的代码,得到了警告 警告:已在处理程序中创建承诺,但未从中返回 它 我应该做些什么来避免它 我阅读了BB的文档,似乎我应该返回承诺 我的问题是在哪里?我猜是在调用函数中,但不确定如何调用 这是inovke函数 var invoke = function (data,res,fn,entity,req) { .... for (var data in entity.app[0]) { var name = entity.app[0].function;

我使用了下面的代码,得到了警告

警告:已在处理程序中创建承诺,但未从中返回 它

我应该做些什么来避免它

我阅读了BB的文档,似乎我应该
返回
承诺

我的问题是在哪里?我猜是在调用函数中,但不确定如何调用

这是inovke函数

var invoke = function (data,res,fn,entity,req) {
....
    for (var data in entity.app[0]) {

         var name = entity.app[0].function;
                try {
                    fn[name](req, res);
                }
                catch (err) {
                    res.status(500).send("Error" + err);
                }
                if (!res.headerSent) {
                    res.end("done", 200);
                }
            }
        }
    }
};
除此之外,我还试着像下面这样回报承诺,但这是行不通的

var invoke = function (data,res,fn,entity,req) {
....
  return new Promise(function (resolve, reject) {
    for (var data in entity.app[0]) {

         var name = entity.app[0].function;
                try {
                    resolve(fn[name](req, res));
                }
                catch (err) {
                    res.status(500).send("Error" + err);
                }
                if (!res.headerSent) {
                    res.end("done", 200);
                }
            }
        }
    }
};
我不想压制警告我想知道如何解决它


如果我需要添加一些其他信息,请告诉我,我被困在这里:(

我没有测试以下代码,但您应该有这样的方法:

var Promise = require("bluebird");
var glob = Promise.promisify(require('glob'));

glob("files/*.js").then(function (files) {

    return Promise.all(files.map(function (file) {
            return invoke(data,response,fn,entity,req);
        })
    );
}).catch(function (err) {
    console.log('error: ', err);
    res.status(500).send("Error" + err);
}).finally(function(){
    if (!res.headerSent) {
        res.end("done", 200);
    }
});

var invoke = function (data,res,fn,entity,req) {

    return new Promise(function (resolve, reject) {
        for (var data in entity.app[0]) {

             var name = entity.app[0].function;
             try {
                 fn[name](req, res);
             }
             catch (err) {
                reject(err);
             }
        }
    }
};

非常感谢!这解决了一个很难理解的问题(至少对我来说)你能解释为什么这解决了问题,而不仅仅是返回…你需要将新承诺返回到链中,并且当你创建多个承诺时,需要使用承诺。all()。当您捕获调用函数上的错误时,只需拒绝该特定承诺即可将错误传播到链上。
var Promise = require("bluebird");
var glob = Promise.promisify(require('glob'));

glob("files/*.js").then(function (files) {

    return Promise.all(files.map(function (file) {
            return invoke(data,response,fn,entity,req);
        })
    );
}).catch(function (err) {
    console.log('error: ', err);
    res.status(500).send("Error" + err);
}).finally(function(){
    if (!res.headerSent) {
        res.end("done", 200);
    }
});

var invoke = function (data,res,fn,entity,req) {

    return new Promise(function (resolve, reject) {
        for (var data in entity.app[0]) {

             var name = entity.app[0].function;
             try {
                 fn[name](req, res);
             }
             catch (err) {
                reject(err);
             }
        }
    }
};