q。所有功能都不能正常工作

时间:2016-04-04 11:09:29

标签: javascript angularjs asynchronous

我有以下代码:

var fs = require('fs');
var parse = require('csv-parse');
var async = require('async');

var queue, stream;
var headers = fileData.subText.meta.fields;


MongoClient.connect(url, function (err, db) {
    if (err) throw err;

    var collection = db.collection(fileData.collectionName);
    var parser = parse({columns: fileData.subText.meta.fields, delimiter: fileData.delimiter});
    stream = fs.createReadStream("filepath" + fileData.name).pipe(parser);
    var data;

    queue = async.queue(function (task, next) {
         data = task.data;
         collection.insert(data, function (err, result) {
            if (err) {
                db.close();
                console.log(err);
            } else {
                next();
            }
        });
    }, 50);

    stream.on('data', function (data) {
        stream.pause();
        queue.push({
            data: data
        });
    });

    queue.drain = function () {
        stream.resume();
    };

    stream.on('end', function () {
        return queue.drain = function () {
            db.close();
            return console.log('Process Done');
        };
    });
}); 

以下是异步更新函数之一(所有函数编码类似):

        function start() {
            var function = this.buildUpModels;
            console.log('async wordt gestart');
            $q.all([Timeline.updateEvents(),Timeline.updateTimeslots(),Sponsors.updateSponsors(),Biography.updateBiography()]).then( function (rv){               
                console.log('async is done');
                function ();
            });               

            window.localStorage.setItem('check', 'done');
            window.localStorage.setItem('planning', '[1,2]');
        } 

        function buildUpModels() {
            console.log('start buildUpModels')             
            Biography.buildObject();
            Timeline.buildObject();
        } 

据我所知,在q.all()中的所有promise都已解决之后,应该调用console.log("异步完成")和function()语句。然而,在解析异步函数之前调用这些函数。我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

我想我找到了答案!这个问题纯粹是因为我在离子实验室进行测试。

-Device nr.1找到一个空的localstorage并填充它。然后它开始构建对象。 (显然它等待结果应该如此)
-Device nr.2然而找到一个完整的本地存储(因为另一个电话填充它)然后直接执行this.buildUpModels(因为如果localstorage不为空,它不通过异步函数的回调调用)。

提示:在使用离子实验室等测试工具

时,请注意包含localstorage的测试代码