我有以下代码:
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()语句。然而,在解析异步函数之前调用这些函数。我究竟做错了什么?
答案 0 :(得分:0)
我想我找到了答案!这个问题纯粹是因为我在离子实验室进行测试。
-Device nr.1找到一个空的localstorage并填充它。然后它开始构建对象。 (显然它等待结果应该如此)
-Device nr.2然而找到一个完整的本地存储(因为另一个电话填充它)然后直接执行this.buildUpModels(因为如果localstorage不为空,它不通过异步函数的回调调用)。
提示:在使用离子实验室等测试工具
时,请注意包含localstorage的测试代码