【发布时间】:2016-07-23 14:51:05
【问题描述】:
我有一个 nodejs express 服务器,我正在使用 bluebird Promises 来同步所有异步内容。
使用 AWS RDS MySQL 数据库在 localhost 上一切正常,但是当我将服务器上传到我的 AWS EC2 实例时,我发现此功能存在问题:
var Promise = require('bluebird');
var db = require('./db');
exports.matchValue = function (params) {
return new Promise(function(resolve, reject) {
var findValue = new Promise();
if (params.find.includes(".")) {
var aux = params.find.split(".");
var matchBy = {};
if (aux[0]) matchBy.a = aux[0];
if (aux[1]) matchBy.b = aux[1];
findValue = db.getValues1(params.limit,params.page,matchBy);
}
else {
findValue = db.getValues2(params.limit,params.page,params.find);
}
findValue
.then(function(result) {
resolve(result);
})
.catch(function(err) {
reject(err);
});
});
}
我已将变量 findValue 声明为新的 Promise,因为根据 if 条件,它将接收不同数据库查询函数的值(此函数返回一个 Promise)。
当我调用这个函数时,结果如下:"undefined is not a function".
我了解这种行为的发生是因为它首先执行 findValue.then() 而不是 if/else 块代码,并且由于变量未定义,它可以是一个函数。
我以为将一个变量声明为一个新的 Promise 它会等到分配给这个变量的函数的返回完成,但实际上并没有发生。
我做错了什么?有人能帮我吗?
谢谢你的建议!!
【问题讨论】:
-
在哪里,你得到错误了吗?
-
什么是
params.find?因为您使用的是params.find.includes,如果params.find是一个数组,那么它相对较新,并且不会存在于较旧的 JavaScript 引擎上。 -
我在
.then(function(result)上收到错误,它仅在节点在 EC2 实例上运行时发生,当它在本地主机上运行时,结果包含查询响应,而 params.find 只是一个字符串.谢谢。 -
这很奇怪。这表明您从
getValues1(或getValues2)得到的并不是EC2 的承诺。 -
您确定您需要的所有库都已正确安装在您的 EC2 实例上吗?
标签: javascript node.js promise bluebird