res.render 仅在上一个函数完成后

res.render only after previous function has finished

我正在使用 api 来获取数据数组,并将其放入变量中。它需要一段时间才能填满数组,然后使用以下方法将该数组传递给 res.render 文件:

setTimeout(function(){ res.render("page", {searchArray: searchArray}) }, 7000);

那是最后一行,但有一半时间在数组填满之前呈现页面,这会导致错误。填充数组所需的时间取决于用户选择搜索的元素数量。有没有办法在数组填满后只 运行 渲染,而不必硬编码像 7000 这样的随机时间?

编辑:

这是完整代码,必须将 7,000 更改为 20,000,因为 7000 在数组填满之前渲染页面的速度太快

app.post("/search", isLoggedIn, function(req,res){
  var searchArray;

  queryOptions = {
  query: req.body.query,
  location: req.body.city + ", " + req.body.state,
  radius: '25',
  sort: 'date',
  limit: req.body.limit
  };

  searchApi.query(queryOptions).then(res => {
    setTimeout(function(){ searchArray = res; console.log("Search array done!") }, 10);
  });

  setTimeout(function(){ res.render("SearchResults", {searchArray: searchArray}) }, 20000);
});

我想避免使用 settimeout 来猜测前面几行何时会完成它的任务。

您所要做的就是将 render 放入已解决的承诺中。因为then方法是在查询结束后调用的

  searchApi.query(queryOptions).then(searchArray => {
    res.render("SearchResults", {searchArray}) }
  });