我希望通过GAS将多行附加到谷歌表,同时考虑到性能和不希望的可能性.
为了实现这一目标,我将使用appendRow这个解决干预突变的问题,并在单个函数中完成所有操作.
简单示例:
var sheet= SpreadsheetApp.openById(ssId).getSheetByName(sheetName);
sheet.appendRow(["foo", "bar", "foobar"]);
Run Code Online (Sandbox Code Playgroud)
当然要将其扩展到多行,我可以简单地为每一行循环遍历此函数,尽管GAS最佳实践建议不要使用这些实践.
尝试使用appendRow通过2D阵列添加多行是不成功的,并且使用对辅助数组的引用作为进入行的值导致API.
因此,我想问,有没有办法将多行附加到电子表格中,该电子表格仍然可以处理干预的可变性,appendRow并尽可能避免循环?
我目前正在生成的 Google Apps 脚本中的某些代码需要一个对象来完成,其中一个属性由异步请求的结果设置。这个对象,特别是这个属性,稍后会被用到。但是,由于在需要该属性的函数运行时请求尚未返回,因此它们没有正确评估。我的代码如下:
function Thing(val) {
var self = this
var createSuccess = function(data) {
self.foo = data;
}
var init = function(val) {
google.script.run.withSuccessHandler(createSuccess).serverFunc(val);
};
init(val);
}
function objStuff() {
var foobar = new Thing('bar');
// Do stuff with foobar.foo
}
objStuff();
Run Code Online (Sandbox Code Playgroud)
目前使用 foobar.foo 的东西不能正常工作,因为脚本在继续之前没有等待脚本的返回值。
在继续执行脚本的其余部分之前,有没有一种方法可以等待 foo 属性通过异步请求进行评估?
我当前有一个 Proxy 对象,如果未定义属性,我想捕获对该属性的调用。我的代码的基本版本是这样的。
var a = new Proxy({}, {
get: function(target, name, receiver) {
if (target in name) {
return target[name];
} else {
function a() {
return arguments;
}
var args = a();
return [target, name, receiver, args];
}
}
});
Run Code Online (Sandbox Code Playgroud)
对此处(即:a.b; a.c()等)的属性调用应返回属性调用的目标、名称、接收者和参数。
然而,我希望解决的问题需要我知道属性调用是针对属性还是函数,以便我可以对每个属性进行不同的处理。检查参数对象的长度不起作用,因为调用a.c()会产生 0 的长度,就像 一样a.b,因此它将被视为普通属性而不是方法。
因此,有没有办法确定尝试访问的属性是否被作为函数调用。
更新:我应该澄清,如果访问的属性/方法未定义且存在,则此方法需要工作。
我正在处理的一个项目目前已经调用了一个对象类型Chain,它本身只生成一种Link只使用它的对象.在之前的项目中,我已经嵌套了构造函数Link内部的对象构造函数和原型Chain,但是,我开始怀疑这次是否是最好的方法,因为我实际上似乎是Chain用它自己的定义设置每个的Link每一次.
为清楚起见,这是我原来的代码:
var Chain = function() {
var self = this;
var Link = function(key) {
this.prop = key;
};
Link.prototype.attach = function(args) {
for (let value of args) {
this[value.prop] = value.value;
}
};
self.links = [];
}
Chain.prototype.add = function(key) {
this.links.push(new Link(key));
}
Run Code Online (Sandbox Code Playgroud)
然后我开始想知道我是否应该将Link构造函数和原型存储在野外(就像我一样)Chain(对于记录,它不是在野外,它实际上包含在一个对象中)或者我是否应该使用原型Chain定义Link并保持它.
在这种情况下,我没有找到关于最佳实践的大量信息,虽然我强烈怀疑我的第一种做事方式不是最佳/正确的方式; 我不确定我的替代品是否也是.
所以我想问一下,这样做的最佳实践/最有效/最明智的方法是什么?