添加新文件后,Parse不会显示我的所有文件

时间:2015-05-31 22:29:45

标签: javascript node.js parse-platform

我的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时,它应该打印包括新文件在内的所有文件,但它只打印旧文件。但是,一旦我退出并重新登录新文件就在那里。如何修复此问题,以便在用户保存新文件后它与其他文件一起出现?

1 个答案:

答案 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)
      });
  });
});

我发现这对眼睛来说有点难看。我无法确定我是否只是无意中为您编写了语法错误代码。更好的重组是将这个大功能划分为几个承诺 - 返回较小的功能,以他们的承诺命名。