Javascript 如何在Ejs中处理回调响应
在Node.js应用程序中,我想在Ejs代码中调用一些异步函数并呈现结果。我试过:Javascript 如何在Ejs中处理回调响应,javascript,node.js,ejs,Javascript,Node.js,Ejs,在Node.js应用程序中,我想在Ejs代码中调用一些异步函数并呈现结果。我试过: <ul> <% setTimeout(function () { %> <% supplies = [1, 2, 3, 4]; %> <% for(var i=0; i<supplies.length; i++) {%> <li><%= supplies[i] %></li> <% } %> <% }
<ul>
<% setTimeout(function () { %>
<% supplies = [1, 2, 3, 4]; %>
<% for(var i=0; i<supplies.length; i++) {%>
<li><%= supplies[i] %></li>
<% } %>
<% }, 1000) %>
</ul>
好的,看来Ejs不支持这样的功能,但是我们可以做的是使用模块取消同步函数
为什么需要这样做,因为这在EJS中是不可能的。这是一个模板引擎,它只是将所有内容呈现为HTML。它不能设置超时或异步调用。在这个上下文中,我基本上没有访问Node.js代码的权限,在ejs文件中,我运行自定义的东西。我推测使我的文件同步会起作用。但是为什么它不能处理异步调用呢?因为ejs就是这样工作的:)@VsevolodGoloviznin知道了。最后我取消了函数的同步,它工作得很好。我贴了一个例子作为答案。:)
<% function foo (timeout, callback) { %>
<% setTimeout(function () { %>
<% callback(null, [1, 2, 3, 4]; %>
<% }, timeout); %>
<% } %>
<% var Deasync = require("deasync") %>
<% var fooSync = Deasync(foo) %>
<ul>
<% supplies = fooSync(1000); %>
<% for(var i=0; i<supplies.length; i++) {%>
<li><%= supplies[i] %></li>
<% } %>
<% }, 1000) %>
</ul>