【问题标题】:How to call a function when something is done完成某事后如何调用函数
【发布时间】:2014-03-13 11:34:27
【问题描述】:

我正在尝试这样当查询完成并且data 数组已满时,它应该执行res.send() 部分。

此代码当前失败 - sendData 函数在查询完成之前运行:

function showPostsOnPage(pageNumber, nPerPage) {
  funnyPosts.find().skip((pageNumber-1)*nPerPage).limit(nPerPage).each( function(err, post) {
    data.push(post);
  });
  sendData(data);
}

function sendData(data) {
  res.send(
    { msg: '', data: data } // Alerts empty on the client side.
  );    
}

在我使用的客户端:

var pageNumber = {
  'pageNumber': 30
};

$.ajax({
  type: 'POST',
  data: pageNumber,
  url: '/nextHomeImages'
}).done(function( response ) {
  if (response.msg === '') {
    alert(response.data);
  } else {
    console.log('Error: ' + response.msg);
  }
});

【问题讨论】:

  • .each 正在执行表明有一个长度。你为什么没有柜台——然后if (counter ==0)sendData(data);
  • 简单...谢谢;)
  • np,让我知道它是否有效。 :) 我将其作为答案提交
  • 工作,我做了if (data.length === 3) sendData(data);
  • 你确定.each( function(err, post) { data.push(post); }); 不是异步的,这意味着你无法在data 数组填充之前发送数据

标签: javascript jquery node.js mongodb express


【解决方案1】:

我注意到关键字 each 对我来说是 jQuery。

话虽如此,长度是有限的。我会做类似的事情:

var len;
function showPostsOnPage(pageNumber, nPerPage) {
  var _posts = funnyPosts.find().skip((pageNumber-1)*nPerPage).limit(nPerPage);
  len = _posts.length;
  _posts.each( function(err, post) {
    data.push(post);
    len --;
    if (len <= 0) sendData(data);
  });
  //sendData(data);
}

function sendData(data) {
  res.send(
    { msg: '', data: data } // Alerts empty on the client side.
  );    
}

【讨论】:

  • 执行 var _posts = funnPosts 时出现问题...当控制台记录 _posts 时,它返回 { _construct_args: [], 之类的参数,而不是实际的帖子
  • 一定是 mongoskin 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
相关资源
最近更新 更多