Fixes #342 - emit await:finish with client reorder and sync completion

This commit is contained in:
Patrick Steele-Idem 2016-07-20 16:10:42 -06:00
parent f2116dc44d
commit e3aaf5991b
5 changed files with 61 additions and 0 deletions

View File

@ -231,5 +231,8 @@ module.exports = function render(input, out) {
name: name
});
}
} else if (clientReorder) {
// If the async fragment has finished synchronously then we still need to emit the `await:finish` event
out.emit('await:finish', awaitInfo);
}
};

View File

@ -0,0 +1,26 @@
[
{
"event": "await:begin",
"arg": {
"name": "data.userDataProvider",
"clientReorder": true,
"finished": true
}
},
{
"event": "await:beforeRender",
"arg": {
"name": "data.userDataProvider",
"clientReorder": true,
"finished": true
}
},
{
"event": "await:finish",
"arg": {
"name": "data.userDataProvider",
"clientReorder": true,
"finished": true
}
}
]

View File

@ -0,0 +1 @@
<div>Hello Frank!</div>

View File

@ -0,0 +1,5 @@
<await(user from data.userDataProvider) client-reorder>
<div>Hello ${user.name}!</div>
</await>
<await-reorderer/>

View File

@ -0,0 +1,26 @@
var extend = require('raptor-util/extend');
var expect = require('chai').expect;
exports.templateData = {
userDataProvider: function(callback) {
callback(null, {name: 'Frank'});
}
};
exports.checkEvents = function(events, helpers) {
events = events.map(function(eventInfo) {
var arg = extend({}, eventInfo.arg);
expect(arg.out != null).to.equal(true);
delete arg.out; // Not serializable
delete arg.asyncValue; // Not serializable
return {
event: eventInfo.event,
arg: arg
};
});
helpers.compare(events, '-events.json');
};