function save(callback, field, key, chunk, index_doc, index_obj, index_prt = 0) {
    const is_arr = chunk && chunk.constructor === Array,
          data = is_arr ? chunk.shift() : chunk;

    if (!data) {
        return this.export(callback, field, index_doc, index_obj + 1);
    }

    const res = callback((field ? field + "." : "") + (index_prt + 1) + "." + key, JSON.stringify(data));

    if (res && res.then) {
        const self = this;
        return res.then(function () {
            return save.call(self, callback, field, key, is_arr ? chunk : null, index_doc, index_obj, index_prt + 1);
        });
    }

    return save.call(this, callback, field, key, is_arr ? chunk : null, index_doc, index_obj, index_prt + 1);
}
@param {function(string, string):Promise|void} callback
@param {string|null|void} field
@param {string} key
@param {Array|null} chunk
@param {number} index_doc
@param {number} index_obj
@param {number=} index_prt
@this {Index|Document}
@return {Promise}