marko/taglibs/async/AsyncFragmentTag.js
2014-02-06 17:43:48 -07:00

39 lines
1.2 KiB
JavaScript

'use strict';
module.exports = {
render: function (input, context) {
var dataProvider = input.dataProvider;
var arg = input.arg || {};
arg.context = context;
context.beginAsyncFragment(function (asyncContext, asyncFragment) {
function onError(e) {
asyncFragment.end(e);
}
function renderBody(data) {
if (asyncFragment.finished) {
// It looks like the fragment timed out and has already
// been marked as finished... do not render the body
return;
}
try {
if (input.invokeBody) {
input.invokeBody(asyncContext, data);
}
asyncFragment.end();
} catch (e) {
onError(e);
}
}
try {
context.requestData(dataProvider, arg, function(err, data) {
if (err) {
return onError(e);
}
renderBody(data);
});
} catch (e) {
onError(e);
}
}, input.timeout);
}
};