Javascript 蓝鸟返回承诺丢失警告
我使用了下面的代码,得到了警告 警告:已在处理程序中创建承诺,但未从中返回 它 我应该做些什么来避免它 我阅读了BB的文档,似乎我应该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;
返回
承诺
我的问题是在哪里?我猜是在调用函数中,但不确定如何调用
这是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);
}
}
}
};