我正在使用Node,Express和Objection.js。 我的文件结构是:
->Project Folder
->Controllers(folder)
->agenciaController.js
->Models(folder)
->Agencia.js
->index.js
我的index.js代码中的是:
var Knex = require('knex');
var express = require("express");
var app = express();
var knexConfig = require('./knexfile');
var Model = require('objection').Model;
var knex = Knex(knexConfig.development);
Model.knex(knex);
var reqAgenciaController = require('./Controllers/agenciaController');
var agenciaController = new reqAgenciaController();
app.get("/agencias", function(req, res) {
var respuesta = agenciaController.getAgencias();
console.log("log3: "+respuesta);
});
我的agenciaController.js是:
var Agencia = require('../Models/Agencia');
module.exports = agenciaController;
function agenciaController() {
this.getAgencias = function() {
var retValue = "retvalue";
listaAgencias = [];
Agencia.query()
.then(function(agencias) {
listaAgencias = agencias;
console.log("log1: "+ listaAgencias);
});
console.log("log2: "+listaAgencias);
return listaAgencias;
}
}
我的问题是,当我运行代码时,我得到了
log2:
log3: undefined
log1: [object Object, object Object].
但我需要:
log1: [object Object, object Object].
log2: [object Object, object Object].
log3: [object Object, object Object].
我的问题是:是否可以将listaApuestas从控制器返回到index.js,并在promise中获得值?
答案 0 :(得分:0)
agenciaController.getAgencias()应使用您选择的promise库进行宣传。
我建议使用bluebird。
诀窍在于,如果承诺存在于另一个承诺中,您需要稍微改变一下结构。
示例agenciaController.js
var Promise = require("bluebird");
agenciaController = {
getAgencias: function(callback) {
this.queryAsync().then(function(respuesta) {
console.log("log2: "+ respuesta);
callback(false, respuesta);
})
},
query: function(callback) {
console.log("log1", {});
callback(false, { respuesta: "respuesta" })
}
}
Promise.promisifyAll(agenciaController);
module.exports = agenciaController;
示例app.js
var AgenciaController = require('./agenciaController');
agenciaController.getAgenciasAsync().then(function(respuesta) {
console.log("log3: " + respuesta);
});
这将输出:
log1 {}
log2: [object Object]
log3: [object Object]
答案 1 :(得分:0)
感谢您的帮助!最后研究更多关于承诺并遵循他们的例子,解决了这个问题。 这是我用来解决问题的代码
我的agenciaController.js:
var Agencia = require('../Models/Agencia');
module.exports = agenciaController;
function agenciaController() {
this.getAgencias = function() {
return Agencia.query()
.then(function(agencias) {
return agencias;
})
.catch(function(){
console.log("error en la promesa");
});
}
}
我的index.js:
var reqAgenciaController = require('./Controllers/agenciaController');
var agenciaController = new reqAgenciaController();
app.get("/agencias", function(req, res) {
var misAgencias;
var promise = new Promise(function(resolve, reject) {
if (agenciaController.getAgencias() === undefined){
reject("Error al llamar al getAgencias");
}else {
resolve(agenciaController.getAgencias());
}
});
promise
.then( agencias => {
misAgencias = agencias;
console.log(misAgencias);
res.send(misAgencias);
})
.catch(err => console.log("Error: "+err))
});
答案 2 :(得分:0)
fn: async function() {
var output = '';
await myPromise()
.then((data) => {
output = data;
})
.catch((err) => {
output = "Error: " + err;
});
return ans;
}
注意我们如何在 await
返回其值之前 fn
完成承诺