I have a triggered script that usually runs fine, however, it's now throwing an undefined error on getAddress(). Here's the code:
var churnGroup = ContactsApp.getContactGroup("Churn");
var churnGroupContacts = churnGroup.getContacts();
for(var m=0;m<churnGroupContacts.length;m++){
var CME = churnGroupContacts[m].getEmails(); //<---TypeError: Cannot call method "getAddress" of undefined is being triggered on this line
var emailTo = CME[0].getAddress();
var emailSubject = "Daily Churn Report";
MailApp.sendEmail({
to: emailTo,
subject: emailSubject,
htmlBody: emailBody,
inlineImages:emailImages});
}
}
Has any sort of limit changed with ContactApp? Thanks
Please try adding try catch statement.
try {
// your script code here
} catch(e) {
// if the script code throws an error,
// do something with the error here
}
Actually, there are instances wherein errors in Apps Script are being intercepted and dealt with by simply adding exception handling. Such as
Issue 5579 in google-apps-script-issues tracker
Handle Errors in Apps Script with Try and Catch
I hope that helps.
Found it. For one reason or another one of the contacts was coming up with no e-mail even though there was one defined in the contact. Fixed it and the error went away.
The string I have to parse comes from a FileReader(), it may be the content of a valid json file or it may be invalid (eg a script.js) ...
The problem is that try/catch doesn't seem to work with JSON.parse() ?
The following code doesn't catch de exception JSON.parse: unexpected character at line 1 column 1 of the JSON data with an invalid file.
try
{
var json = JSON.parse( content );
..
}
catch (e)
{
..
}
To make a first validation I test the 1st character with ( content.substr(0, 1) === '{' ) but I suppose it's insufficient.
What is the best way to achieve this ?
EDIT: This question was asked by mistake.
try-catch does work with JSON.parse. Try the following in your browser console or use SO's snippet feature:
try{
JSON.parse("b")
} catch(e) {
document.writeln("Caught: " + e.message)
}
The try..catch block does work with JSON.parse, you're probably doing something else wrong. Try running this snippet to see it does indeed work:
var unexpectedJSON = '{a}';
try {
JSON.parse(unexpectedJSON);
}
catch (e) {
alert("Unexpected value in JSON");
}
I am trying to type a javascript code in an textarea and display the result of it in a div.
I went through a similar question:
showing-console-errors-and-alerts-in-a-div-inside-the-page
It works fine for any explicit console statements. But when there are any syntax errors in the code written in the text area, the error message is shown on only in the console and not captured in the code.
The code I am using is:
if (typeof console != "undefined")
if (typeof console.log != 'undefined')
console.olog = console.log;
else
console.olog = function() {};
console.log = function(message) {
console.olog(message);
$('#result').append('<p>' + message + '</p>');
};
console.error = console.debug = console.info = console.log
This works if I type console.log("hello") in the textarea.
But when I type console.log("he deliberately, the error is shown only in the browser console. Is there a way I can capture such messages and display it?
Same way browser console does it.
Add try...catch to your code.
You can use window.onerror to solve the problem, try
window.onerror = function(e) {
console.log(e.stack);
}
My script dont run till the end. And stops due to errors. But there is no console error output.
alert("yo");
var go = "";
go.push(null);
alert("yo2");
first alert works
Tested with Chrome and Firefox
No try catch blocks
Are there reasons for not showing up a console error, without knowing the whole code?
You should see the error: TypeError: Object has no method 'push'
Im getting it in chrome console.
The error message is saying that the push method cannot be run on the variable go.
This is because it is of the type String and thus does have the push method available.
The push method is used to add items into an Array like this:
go = []; // or you could use `go = Array()`;
go.push("A string");
go.push(null);
To output messages to the browser console, use console.log like this:
console.log("Some debug message");
console.log(go); // outputs the above array
I solved the problem by using try-catch:
try
{
var my_app = new My_App();
}
catch(e)
{
console.log("ERROR"+e);
}
Now i get the console output.
How can I print a message to the error console, preferably including a variable?
For example, something like:
print('x=%d', x);
Install Firebug and then you can use console.log(...) and console.debug(...), etc. (see the documentation for more).
console.error(message); // Outputs an error message to the Web Console
console.log(message); // Outputs a message to the Web Console
console.warn(message); // Outputs a warning message to the Web Console
console.info(message); // Outputs an informational message to the Web Console. In some browsers it shows a small "i" in front of the message.
You also can add CSS:
console.log('%c My message here', "background: blue; color: white; padding-left:10px;");
More info can be found here: https://developer.mozilla.org/en-US/docs/Web/API/console
Exceptions are logged into the JavaScript console. You can use that if you want to keep Firebug disabled.
function log(msg) {
setTimeout(function() {
throw new Error(msg);
}, 0);
}
Usage:
log('Hello World');
log('another message');
One good way to do this that works cross-browser is outlined in Debugging JavaScript: Throw Away Your Alerts!.
Here is a solution to the literal question of how to print a message to the browser's error console, not the debugger console. (There might be good reasons to bypass the debugger.)
As I noted in comments about the suggestion to throw an error to get a message in the error console, one problem is that this will interrupt the thread of execution. If you don't want to interrupt the thread, you can throw the error in a separate thread, one created using setTimeout. Hence my solution (which turns out to be an elaboration of the one by Ivo Danihelka):
var startTime = (new Date()).getTime();
function logError(msg)
{
var milliseconds = (new Date()).getTime() - startTime;
window.setTimeout(function () {
throw( new Error(milliseconds + ': ' + msg, "") );
});
}
logError('testing');
I include the time in milliseconds since the start time because the timeout could skew the order in which you might expect to see the messages.
The second argument to the Error method is for the filename, which is an empty string here to prevent output of the useless filename and line number. It is possible to get the caller function but not in a simple browser independent way.
It would be nice if we could display the message with a warning or message icon instead of the error icon, but I can't find a way to do that.
Another problem with using throw is that it could be caught and thrown away by an enclosing try-catch, and putting the throw in a separate thread avoids that obstacle as well. However, there is yet another way the error could be caught, which is if the window.onerror handler is replaced with one that does something different. Can't help you there.
If you use Safari, you can write
console.log("your message here");
and it appears right on the console of the browser.
To actually answer the question:
console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);
Instead of error, you can also use info, log or warn.
If you are using Firebug and need to support IE, Safari or Opera as well, Firebug Lite adds console.log() support to these browsers.
The WebKit Web Inspector also supports Firebug's console API (just a minor addition to Dan's answer).
A note about 'throw()' mentioned above. It seems that it stops execution of the page completely (I checked in IE8) , so it's not very useful for logging "on going processes" (like to track a certain variable...)
My suggestion is perhaps to add a textarea element somewhere in your document and to change (or append to) its value (which would change its text) for logging information whenever needed...
As always, Internet Explorer is the big elephant in rollerskates that stops you just simply using console.log().
jQuery's log can be adapted quite easily, but is a pain having to add it everywhere. One solution if you're using jQuery is to put it into your jQuery file at the end, minified first:
function log()
{
if (arguments.length > 0)
{
// Join for graceful degregation
var args = (arguments.length > 1) ? Array.prototype.join.call(arguments, " ") : arguments[0];
// This is the standard; Firebug and newer WebKit browsers support this.
try {
console.log(args);
return true;
} catch(e) {
// Newer Opera browsers support posting erros to their consoles.
try {
opera.postError(args);
return true;
}
catch(e)
{
}
}
// Catch all; a good old alert box.
alert(args);
return false;
}
}
Visit https://developer.chrome.com/devtools/docs/console-api for a complete console api reference
console.error(object[Obj,....])\
In this case, object would be your error string
function foo() {
function bar() {
console.trace("Tracing is Done here");
}
bar();
}
foo();
console.log(console); //to print console object
console.clear('console.clear'); //to clear console
console.log('console.log'); //to print log message
console.info('console.info'); //to print log message
console.debug('console.debug'); //to debug message
console.warn('console.warn'); //to print Warning
console.error('console.error'); //to print Error
console.table(["car", "fruits", "color"]);//to print data in table structure
console.assert('console.assert'); //to print Error
console.dir({"name":"test"});//to print object
console.dirxml({"name":"test"});//to print object as xml formate
To Print Error:- console.error('x=%d', x);
console.log("This is the outer level");
console.group();
console.log("Level 2");
console.group();
console.log("Level 3");
console.warn("More of level 3");
console.groupEnd();
console.log("Back to level 2");
console.groupEnd();
console.log("Back to the outer level");
console.log("your message here");
working for me.. i'm searching for this.. i used Firefox.
here is my Script.
$('document').ready(function() {
console.log('all images are loaded');
});
works in Firefox and Chrome.
The simplest way to do this is:
console.warn("Text to print on console");
To answer your question you can use ES6 features,
var var=10;
console.log(`var=${var}`);
This does not print to the Console, but will open you an alert Popup with your message which might be useful for some debugging:
just do:
alert("message");
With es6 syntax you can use:
console.log(`x = ${x}`);