It has to be something dumb but I can’t see it
The following code snippet throws.
hostReportError.js:3 Uncaught TypeError: Cannot read properties of undefined (reading ‘mapToTextValue’)
at eval (datasource.js:228:13)
The returned data from dorequest
{“status”:200,“statusText”:“OK”,“ok”:true,“data”:{“results”:[{“servername”:“frontoff”},{“servername”:“backoff”},{“servername”:“frontoff_er”},{“servername”:“backoff_er”}],“hasMore”:false,“responseTime”:2},“headers”:{},“url”:“https://xxxxxxxx:3000/api/datasources/proxy/1/sql",“type”:“basic”,“redirected”:false,“config”:{“url”:“api/datasources/proxy/1/sql”,“data”:"{“sql”:“select servername from oni_server where custid = 14”}”,“method”:“POST”,“headers”:{“Content-Type”:“application/json”,“X-Grafana-Org-Id”:1},“retry”:0,“hideFromInspector”:false}}
Via Chrome dev tools, ‘this’ is not defined when I get to the return this.mapToTextValue
{
key: ‘metricFindQuery’,
value: function metricFindQuery(query) {
console.log("\n Entry metricFindQuery - query : \n" + JSON.stringify(query));
var interpolated = {
target: this.templateSrv.replace(query, null, 'regex')
};
var str = new Object;
str.sql = interpolated.target;
var mypost = JSON.stringify(str);
return this.doRequest({
url: this.url + "/sql",
data: mypost,
method: 'POST'
}).then(function(result) {
console.log("\n Exit metricFindQuery - result : \n" + JSON.stringify(result));
return this.mapToTextValue; **<<<< Crashes**
});
}
}, {
key: 'mapToTextValue',
value: function mapToTextValue(result) {
console.log('Boo');
console.log('mapToTextValue' + JSON.stringify(result));
return _.map(result.data, function(d, i) {
if (d && d.text && d.value) {
return {
text: d.text,
value: d.value
};
} else if (_.isObject(d)) {
var col = Object.keys(d)[0];
return {
text: d[col],
value: i
};
}
return {
text: d,
value: d
};
});
}
},