Marko和Koajs:为什么我的asynchronous片段渲染不起作用?

我试图让渐进渲染在Marko和Koajs工作。

首先,我使用request-promise模块为JSON数据馈送做出承诺。

rp = require('request-promise') function getDataFeed() { var url = "http://api.dronestre.am/data"; var options = { url: url, headers: { 'User-Agent': 'request' }, }; rp(options).then(function(result) { var info = JSON.parse(result); return info.strike; }); }; 

然后,我使用koa路由器和Marko加载一个模板,在这个模板中,数据以数据formsinput

 // router method to serve first visualization router.get('/first', function *() { let data = { strikes : getDataFeed() }; this.body = marko.load('./views/first.marko').stream(data); this.type = "text/html"; }) 

最后,在我的模板中,我使用asynchronous片段来指示页面的部分应该asynchronous加载:

 <async-fragment data-provider='data.strikes' var='strikes' client-reorder='true'> <async-fragment-placeholder> <p>Loading...</p> </async-fragment-placeholder> <for each="strike in strikes"> <tr> <td>${strike.number}</td> <td>${strike.country}</td> <td>${strike.date}</td> <td>${strike.narrative}</td> <td>${strike.town}</td> <td>${strike.deaths}</td> <td>${strike.target}</td> <td>${strike.lat}</td> <td>${strike.lon}</td> </tr> </for> </async-fragment> 

不幸的是,在asynchronous片段块中没有加载任何内容。 甚至没有占位符。

如何让占位符显示,然后将数据放在我的模板中?

问题解决了! 我需要返回getDataFeed()中的promise函数

解:

 rp = require('request-promise') function getDataFeed() { var url = "http://api.dronestre.am/data"; var options = { url: url, headers: { 'User-Agent': 'request' }, }; return rp(options).then(function(result) { var info = JSON.parse(result); return info.strike; }); };