2015-10-19 5 views
0

В моем приложении Node.js я хочу вызвать некоторую асинхронную функцию в коде Ejs и визуализировать результат. Я пробовал:Как обрабатывать ответы обратного вызова в Ejs

<ul> 
<% setTimeout(function() { %> 
<% supplies = [1, 2, 3, 4]; %> 
<% for(var i=0; i<supplies.length; i++) {%> 
    <li><%= supplies[i] %></li> 
<% } %> 
<% }, 1000) %> 
</ul> 

Но, похоже, он не работает. Почему это не работает и как я могу это исправить?

+0

Зачем вам это нужно, потому что это невозможно в EJS. Это механизм шаблонов, который просто превращает все в HTML. Он не может устанавливать таймауты или асинхронные вызовы. –

+0

В основном я не имею доступа к коду Node.js в этом контексте, а в файле ejs запускаю свой файл. Я предполагаю, что работа с файловой синхронизацией будет работать. Но почему он не работает с асинхронными вызовами? –

+0

Потому что так работает ejs :) –

ответ

-2

Ok, так что кажется, что Эйс не поддерживает такую ​​функцию, но то, что мы можем сделать, это deasync функция с помощью deasync модуля.

<% 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>