我在node.js中有一個模塊,它通過sequelize lib與postgres數據庫連接。我的模塊代碼基本上是:在node.js中承諾藍鳥的問題
// ofr-network/index.js
var requireDir = require('require-dir');
var models = requireDir('./models');
var network = {
getReportsFromCity: function(cityId) {
models.index.reports.findAll({
where: { id: cityId },
attributes: ['id', 'latitude', 'longitude']
}).then(function(reports) {
console.log('[NETWORK-OFR] Get reports from %s', cityId);
return reports;
}).catch(function(err){
console.log('Error getting reports from %s', cityId);
console.log(err);
});
}
}
module.exports = network;
那麼,這段代碼工作正常。現在我正在嘗試在我的快速應用程序中使用此模塊,導入並調用此方法,但此代碼不返回任何內容。我查過了,看到我必須使用承諾,一旦上面的代碼是異步的。 我的API方法的代碼如下:
var express = require('express');
var app = express();
var router = express.Router();
var network = require('ofr-network');
var Promise = require('bluebird');
router.get('/', function(req, res) {
var getReports = Promise.promisify(network.getReportsFromCity, network);
getReports(538).then(function(reports) {
console.log('DONE');
// this print isn't running
}).catch(function(err){
console.log(err);
});
res.render('index.html', { title: 'Title page' });
});
module.exports = router;
有人能幫助我嗎?
你爲什麼promisify'getReports'? promisify是爲了使回調函數返回承諾,'getReports'已經返回一個承諾 – Esailija