javascript - Bluebird 返回 promise 丢失警告

标签 javascript node.js promise q bluebird

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

Warning: a promise was created in a handler but was not returned from it

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

glob("files/*.js")
            .then(function (files) {
               files.forEach(function (file) {
                    ...
                     invoke(data,response,fn,entity,req);
                });
            }).catch(function (err) {
                console.log('error: ', err);
            }
        )

我应该怎么做才能避免呢?

我看了BB的文档,看来我应该return这个promise

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

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

此外,我已尝试返回以下不起作用的 promise

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

关于javascript - Bluebird 返回 promise 丢失警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37539266/

相关文章:

javascript - AngularJS : Compile directives inside HTML returned by an API

javascript - JavaScript 中使用 ASCII 代码转义字符

javascript - 使用 Javascript 根据所选的下拉值更改表单的操作

c++ - 在 Node.js C++ 插件中,永远不会调用 SetWindowsHookEx 的回调

javascript - 打破 Mongoose 中的 Bluebird promise 链

javascript - Angular promise 返回 "undefined"值 .NET MVC

javascript - 使用 jQuery 移动按钮

javascript - facebook Messenger Webview 和 Messenger 扩展

node.js - NodeJS - 按 ID 查找不起作用

javascript - 为什么 Javascript 异步函数不立即返回?