我的Web应用程序允许用户创建和查看他们创建的文件。当用户登录时,他们可以看到他们创建的所有文件,但是当用户创建新文件,然后单击以查看所有文件时,新创建的文件就不存在。
以下是我在解析时保存文件的代码:
overflow: auto;
因此,一旦保存了新文件,我会router.post('/newfile', function(req, res) {
var usercode = req.body.code;
console.log(usercode);
newname = req.body.name;
console.log(newname);
var bytes = [];
var doc = {};
for (var i = 0; i < usercode.length; i++) {
bytes.push(usercode.charCodeAt(i));
};
console.log("passed byetes");
var parseFile = new Parse.File(newname, bytes);
parseFile.save();
var FileClass = Parse.Object.extend("File");
var newFile = new FileClass();
newFile.save({
user: Parse.User.current(),
fileName: newname,
javaFile: parseFile
});
var newFileClass = Parse.Object.extend("File");
var query = new Parse.Query(newFileClass);
query.find(function(results) {
for (var i = 0; i < results.length; i++) {
var object = results[i];
var codefile = object.get('javaFile');
temp = codefile.name();
name = temp.split("-").pop();
url = codefile.url();
doc[name] = url;
}
}).then(function() {
console.log("Inside then(function()");
console.log(doc);
res.json({
FIles: JSON.stringify(doc)
});
});
});
再次获取所有文件。当程序到达行parse.query.find
时,它应该打印包括新文件在内的所有文件,但它只打印旧文件。但是,一旦我退出并重新登录新文件就在那里。如何修复此问题,以便在用户保存新文件后它与其他文件一起出现?
答案 0 :(得分:0)
save()以异步方式运行,因此save()之前的所有代码都在它之前运行,之后查询将能够显示任何新内容。重组如下:
save().then(function () {
// everything that follows your save() here
var FileClass = Parse.Object.extend("File");
// etc.
});
编辑 - 编辑中更好的代码格式化显示有几个异步函数正在尝试,使用promises来保持它们的直接...
router.post('/newfile', function(req, res) {
var usercode = req.body.code;
console.log(usercode);
newname = req.body.name;
console.log(newname);
var bytes = [];
var doc = {};
for (var i = 0; i < usercode.length; i++) {
bytes.push(usercode.charCodeAt(i));
};
console.log("passed byetes");
var parseFile = new Parse.File(newname, bytes);
parseFile.save();
var FileClass = Parse.Object.extend("File");
var newFile = new FileClass();
newFile.save().then(function () {
user: Parse.User.current(),
fileName: newname,
javaFile: parseFile
var newFileClass = Parse.Object.extend("File");
var query = new Parse.Query(newFileClass);
return query.find();
}).then(function(results) {
for (var i = 0; i < results.length; i++) {
var object = results[i];
var codefile = object.get('javaFile');
temp = codefile.name();
name = temp.split("-").pop();
url = codefile.url();
doc[name] = url;
}
console.log("Inside then(function()");
console.log(doc);
res.json({
FIles: JSON.stringify(doc)
});
});
});
我发现这对眼睛来说有点难看。我无法确定我是否只是无意中为您编写了语法错误代码。更好的重组是将这个大功能划分为几个承诺 - 返回较小的功能,以他们的承诺命名。