如何将数据同步插入mongo(Nodejs,Express) [英] How to insert data to mongo synchronously (Nodejs, Express)

查看:91
本文介绍了如何将数据同步插入mongo(Nodejs,Express)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用node(express)将数据插入mongo db时遇到问题

I have a problem with inserting data to mongo db using node(express)

我的代码如下:

router.get('/data/:section/:sort', function(req, res, next) {
//Deleting old data always before writing new
//Image.remove().exec();
var section = req.params.section;
var sort = req.params.sort;
//Link to Igmur API
var url = 'https://api.imgur.com/3/gallery/'+section+'/'+sort+'/1'; //1 at the end is used to get more than 60 images(gives only 60 without it)
    request.get({
    url: url,
    method: 'GET',
    headers: {
        'Authorization': 'Client-Id XXXXXXXXXXXXX'
    }}, function(e, r, body){
var metadata = JSON.parse(body);
for(var i = 0; i<100; i++){
        var image = new Image(metadata.data[i])
        image.save(function(err, result){
        });
};res.render('index', { title: 'SearchAPI' });});});

问题是我只能插入大约20个对象,而不是您在循环中看到的100个对象. 全部是因为节点只是在完全完成save方法之前向前跳转. 我怎样才能解决这个问题?预先谢谢你

The problem is that I get only about 20 objects inserted instead of 100 as u can see in the loop. All because node just jump forward before the save method is completely done. How can I fix this? Thank you in advance

推荐答案

使用Promise库,例如 Q

Use a promise library such as Q

您基本上需要做的是等待所有save方法完成.使用Q.all方法等待所有内容被执行.

What you basically need to do is wait for all your save methods to complete. Use the Q.all method which waits for everything to be executed.

var Q = require('q');

var promiseArr = [];

for(var i = 0; i<100; i++){
        var imgDefer = Q.defer();
        var image = new Image(metadata.data[i])
        image.save(function(err, result){
             if(err)imgDefer.reject(err);
             else imgDefer.resolve()
        });
       promiseArr.push(imgDefer);
}
Q.all(promiseArr).then (function (){
    res.render('index', { title: 'SearchAPI' });
})

这篇关于如何将数据同步插入mongo(Nodejs,Express)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆