Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅在上一个函数完成后重新渲染_Javascript_Node.js_Express_Ejs - Fatal编程技术网

Javascript 仅在上一个函数完成后重新渲染

Javascript 仅在上一个函数完成后重新渲染,javascript,node.js,express,ejs,Javascript,Node.js,Express,Ejs,我正在使用一个api获取进入变量的数据数组。填充数组需要一段时间,然后使用以下命令将此数组传递到res.render文件: setTimeout(function(){ res.render("page", {searchArray: searchArray}) }, 7000); 这是最后一行,但有一半的时间在数组填充之前呈现页面,这会导致错误。填充数组所需的时间取决于用户选择搜索的元素数量。是否有一种方法可以仅在填充阵列后运行渲染,而不必硬编码像7000这样的随机时间 编辑: 这是完整的代

我正在使用一个api获取进入变量的数据数组。填充数组需要一段时间,然后使用以下命令将此数组传递到res.render文件:

setTimeout(function(){ res.render("page", {searchArray: searchArray}) }, 7000);
这是最后一行,但有一半的时间在数组填充之前呈现页面,这会导致错误。填充数组所需的时间取决于用户选择搜索的元素数量。是否有一种方法可以仅在填充阵列后运行渲染,而不必硬编码像7000这样的随机时间

编辑:

这是完整的代码,必须将7000改为20000,因为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来猜测前几行何时将完成任务。

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

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

你所要做的就是把
渲染成
。因为
then
方法是在查询完成后调用的

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

如果在获取获取结果后呈现页面呢?请向我们显示所有相关代码,包括填充数组的异步代码。您不应该在此处使用
setTimeout()
。您应该使用适当的异步回调或承诺,以便在实际完成时可以重新编译。如果您向我们展示其余的相关代码,我们可以建议您正确的编码方式。使用异步/等待或回调。检查这里好的我添加了完整的代码,我尝试使用.then()读取该链接,但我不断收到错误获取结果后是否呈现页面?请向我们显示所有相关代码,包括填充数组的异步代码。您不应该在此处使用
setTimeout()
。您应该使用适当的异步回调或承诺,以便在实际完成时可以重新编译。如果您向我们展示其余的相关代码,我们可以建议您正确的编码方式。使用异步/等待或回调。检查这里好的,我添加了完整的代码,我尝试使用.then()读取该链接,但我不断出错