mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
'use strict';
|
|
var raptorDataProviders = require('raptor-data-providers');
|
|
|
|
module.exports = function render(input, context) {
|
|
var dataProvider = input.dataProvider;
|
|
|
|
var dataProviders = raptorDataProviders.forContext(context, false /* don't create if missing */);
|
|
|
|
var arg = input.arg || {};
|
|
|
|
arg.context = context;
|
|
var asyncContext = context.beginAsync(input.timeout);
|
|
|
|
function onError(e) {
|
|
asyncContext.error(e || 'Async fragment failed');
|
|
}
|
|
|
|
function renderBody(data) {
|
|
try {
|
|
if (input.invokeBody) {
|
|
input.invokeBody(asyncContext, data);
|
|
}
|
|
asyncContext.end();
|
|
} catch (e) {
|
|
onError(e);
|
|
}
|
|
}
|
|
|
|
var method = input.method;
|
|
if (method) {
|
|
dataProvider = dataProvider[method].bind(dataProvider);
|
|
}
|
|
|
|
try {
|
|
dataProviders.requestData(dataProvider, arg, function(err, data) {
|
|
if (err) {
|
|
return onError(err);
|
|
}
|
|
|
|
renderBody(data);
|
|
});
|
|
} catch (e) {
|
|
onError(e);
|
|
}
|
|
}; |