complete = function complete(nodes, totalNodes) {
            // A little type-safety for silly situations
            if (!isArrayLike(nodes)) {
              return reject(new TypeError('Loader requires an array-like `nodes` parameter.'));
            }
            _this4.context().batch();
            _this4.state('loading', false);
            var model = collectionToModel(_this4._tree, nodes, _this4);
            if (isArrayLike(_this4.children)) {
              _this4.children = _this4.children.concat(model);
            } else {
              _this4.children = model;
            }
            if (parseInt(totalNodes, 10) > nodes.length) {
              _this4.children._pagination.total = parseInt(totalNodes, 10);
            }

            // If using checkbox mode, share selection with newly loaded children
            if (_this4._tree.config.selection.mode === 'checkbox' && _this4.selected()) {
              _this4.children.select();
            }
            _this4.markDirty();
            _this4.context().end();
            resolve(_this4.children);
            _this4._tree.emit('children.loaded', _this4);
          }
Initiate a dynamic load of children for a given node.

This requires `tree.config.data` to be a function which accepts
three arguments: node, resolve, reject.

Use the `node` to filter results.

On load success, pass the result array to `resolve`.
On error, pass the Error to `reject`.

@return {Promise<TreeNodes>} Promise resolving children nodes.