我正在尝试编写一个简单的可移植函数,我可以在其中传入object.property并从结果中设置其值。简单的例子:
var myFunction = function (result){
var data;
//get some data
return result = data;
};
myObject.someData;
myFunction(pass reference to key of myObject.someData here)
我想在这里传递对myObject.someData的键的引用。布朗尼指出也在这里宣布它而不是上面的行。
现在我的实际代码:
var configurations;
var oldServer;
//make a call to get details of old server here
//helper function to stream json into a variable
var streamToString = function(stream, result) {
var data = '';
var chunk;
stream.on('readable', function() {
while ((chunk=this.read()) != null) {
data += chunk;
}
});
stream.on('end', function() {
data = JSON.parse(data);
return result = data;
});
}
//declare shadowsocks as a property, so it can be passed as a param
configurations.shadowsocks;
//
streamToString(sequest.get('root@'+ oldServer[0].networks.v4[0].ip_address, '/etc/shadowsocks-libev/config.json', {
privateKey: sshKey,
readyTimeout: 20000
}, function (error, stdout) {
if (error) {
throw error;
}
}), configurations.shadowsocks
);
我知道我可以这样做"错误的方式"通过做:
stream.on('end', function() {
data = JSON.parse(data);
return configurations.shadowsocks = data;
});
}
但它不便携。我想让这个便携式。
答案 0 :(得分:1)
在JavaScript中无法满足您的要求。您可能做的最好的事情是传递要设置的对象和属性名称。例如:
function streamToString(stream, result, resultKey) {
var data = '';
var chunk;
stream.on('readable', function() {
while ((chunk=this.read()) != null) {
data += chunk;
}
});
stream.on('end', function() {
data = JSON.parse(data);
result[resultKey] = data;
});
}
然后使用它:
streamToString(/*...*/, configurations, 'shadowsocks');
我还应该指出,除非您将此作为一次性任务执行并且在完成时不在乎,否则您应该使用通过该值调用的回调,然后设置回调中该值的属性。通过这种方式,您将知道该属性何时已设置并可以使用。