我目前有一些代码如下所示:
$.when(aiFileGen, foeFileGen, foe2FileGen, playerFileGen).then(function (
aiFiles,
foeFiles,
foe2Files,
playerFiles
) {
var files = _.assign({}, aiFiles, foeFiles, foe2Files, playerFiles);
self.files(files);
done.resolve();
});快照self.files()如下:
Object {/pa/ai/unit_maps/ai_unit_map.json.ai: Object, /pa/units/sea/hover_ship/hover_ship.json.ai: Object, /pa/units/sea/fabrication_barge/fabrication_barge.json.ai: Object, /pa/units/sea/drone_carrier/drone/drone.json.ai: Object, /pa/units/sea/drone_carrier/carrier/carrier.json.ai: Object…}这种方法的问题是,它假设参数的数量是固定的,但参数的数量可以改变。因此,我尝试着转换成更有活力的东西。
var filesToProcess = [aiFileGen, playerFileGen];
filesToProcess.push(foeFileGen, foe2FileGen);
$.when.apply($, filesToProcess).always(function () {
self.files(_.assign({}, arguments));
done.resolve();
});但是,self.files()的输出如下所示:
Object {0: Object, 1: Object, 2: Object, 3: Object}在将方法1转换为方法2的过程中,我哪里出了问题?
发布于 2020-07-13 23:41:10
问题是你总是用两个参数来调用_.assign({}, arguments)。相反,您希望将arguments中的每个参数作为单独的参数传递给_.assign。
这可以类似于您更改$.when调用的方式。但是,您必须先执行convert the arguments to an array,这样才能添加额外的{}参数。
var assignArgs = Array.prototype.push.apply([{}], arguments);
self.files(_.assign.apply(_, assignArgs);但是,我建议您研究一下spread和rest语法(...)。这使得传递和接受可变数量的参数变得容易得多。
$.when.apply($, filesToProcess).always(function () {
var assignArgs = Array.prototype.push.apply([{}], arguments);
self.files(_.assign.apply(_, assignArgs);
done.resolve();
});
// can be changed to
$.when(...filesToProcess).always(function () {
self.files(_.assign({}, ...arguments));
done.resolve();
});https://stackoverflow.com/questions/62878748
复制相似问题