Я новичок в Promise, и мне трудно создать Promise, который будет включать функцию Sequelize, которая уже использует Promise.NodeJS - Создайте функцию Promise, которая использует функцию Sequelize
Я хотел бы что-то вроде этого:
var geojson = require(path.join(__dirname, 'lib', 'geojson');
router.get('/[0-9]{3}/points.geojson', function(req, res, next){
var codecs = req.url.split('/')[1];
geojson.pointsToGeoJSON(codecs).then(function(geoJSON){
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(JSON.stringify(geoJSON));
});
});
./lib/geojson.js:
var path = require('path');
var Promise = require('promise');
var Geojson = require('geojson');
var Point = require(path.join(__dirname, '..', '..', 'models', 'point'));
module.exports = {
pointsToGeoJSON: function(codecs) {
//this is a Sequelize function
Point.findAll({where: {codecs : codecs}, raw: true})
.then(function(points){
var data = [];
for(var i=0; i < points.length; i++){
points[i].coordinates = JSON.parse(points[i].coordinates);
data.push(points[i]);
}
//this is another asyn function
Geojson.parse(data, {'crs': {'type': 'name', 'properties': {'name': 'EPSG:3857'}}, 'Point': 'coordinates'}, function(geoJSON){
//this is what I want the function to return
return geoJSON;
});
});
}
}
Как я могу сделать выше pointsToGeoJSON
функцию использовать Promise, для того, чтобы иметь возможность использовать .then()
Используйте синюю птицу, чтобы обещать все. '' 'npm install bluebird --save'''. Я использовал его в каждом проекте. https://github.com/petkaantonov/bluebird –
is'nt то же самое, что и обещание npm? –
Да и нет. Да, он может создавать единые обещания, как в вашем случае, но также имеет функцию '' 'promisifyAll''', которая может обещать целую библиотеку. Это всего лишь предложение. Вот почему я не опубликовал его в качестве ответа. –