That's a report of what Chrome has experienced, but *not* an
exception. If you put it in a try/catch block, the catch will not
execute.

chrome.bookmarks.get(folderID, function(bookmarks) {
     if (!chrome.extension.lastError) { //do something useful }
 });

is equally readable imo... I will also point out that the code you posted:

chrome.bookmarks.get(folderID, function(bookmarks) {
     if (bookmarks) { //do something useful }
 });

DOES work currently, at least it does on Windows, and I can't see why
it would be platform-dependent...

On 12/30/09, rich <[email protected]> wrote:
> I'm using Chromium 4.0.284.0 (35300) Ubuntu
>
> I can punch the following code into the JavaScript console (of an
> extension background page where bookmarks are permitted):
>
> chrome.bookmarks.get('2323232', function(foo) {
> if (chrome.extension.lastError) { console.log("Not found"); } else {
> console.log("Found"); }});
>
> ....and it definitely throws an exception (in red):
>
>>  (X) Error during bookmarks.get: Can't find bookmark for id.
>
> ... and the little error count in the bottom right goes up by one.
>
>
> What I propose is more like:
>
> chrome.bookmarks.get(folderID, function(bookmarks) {
>     if (bookmarks) { //do something useful }
> });
>
> Which is easy to read and therefore more than just a convenience,
> IMHO.
>
>
> - rich
>
>
>
> On Dec 30, 3:39 pm, Daniel Wagner-Hall <[email protected]> wrote:
>> Which version of Chrome are you using? On the dev channel, and I think
>> the beta channel, the behaviour is:
>>
>> It doesn't actually throw an exception when the bookmark doesn't
>> exist.  It sets a flag which indicates that the call couldn't return a
>> bookmark (chrome.extension.lastError).  This is consistent with most
>> of the other APIs (for instance, all of the chrome.tabs and
>> chrome.windows APIs).  The callback is called whether or not the
>> bookmark could be found, and you should check for that flag to see
>> whether or not the bookmark could be found.  You don't need to catch
>> an exception, because the execution of chrome.bookmarks.get is
>> asynchronous.
>>
>> The way it currently works:
>>
>> chrome.bookmarks.get(folderID, function(bookmarks) { if
>> (chrome.extension.lastError) { console.log("Not found"); } else {
>> console.log(bookmarks); }});
>>
>> The way you're proposing:
>>
>> chrome.bookmarks.get(folderID, function(bookmarks) { if (bookmarks ==
>> []) { console.log("Not found"); } else { console.log(bookmarks); }});
>>
>> They're basically the same, except checking chrome.extension.lastError
>> is more general purpose (can be mirrored in other APIs), whereas
>> returning an empty array is more specific to this use.  I agree that
>> perhaps if the extension couldn't find any bookmarks with that ID, it
>> would maybe be convenient if it returned an empty array as the
>> argument to the callback, as well as setting
>> chrome.extension.lastError, but that would simply be a convenience.
>>
>>
>>
>> On Wed, Dec 30, 2009 at 3:02 AM, rich <[email protected]> wrote:
>> > Well that works so far in that the presence of an uncaught Exception
>> > indicates the bookmark doesn't exist.
>>
>> > However there is still an uncaught exception. If this is the best way
>> > to use the API then clearly the API is rubbish.
>>
>> > Wouldn't it be better if an array of BookmarkTreeNodes was passed to
>> > the callback function, like this: function(array of BookmarkTreeNode
>> > results) {...});
>>
>> > If there are no results, then the array is empty.
>>
>> > (This is how chrome.bookmarks.search works)
>>
>> > thoughts?
>>
>> > On Dec 30, 1:17 pm, Daniel Wagner-Hall <[email protected]> wrote:
>> >> Are you looking for a specific bookmark by ID? Something along the
>> >> lines of:
>>
>> >> chrome.bookmarks.get(folderID, function(foo) { if
>> >> (chrome.extension.lastError) { console.log("Not found"); } else {
>> >> console.log("Found"); }});
>>
>> >> may work...
>>
>> >> On Wed, Dec 30, 2009 at 1:08 AM, rich <[email protected]> wrote:
>> >> > bump!
>>
>> >> > On Dec 29, 6:54 am, rich <[email protected]> wrote:
>> >> >> What is the recommended way to test for existence of a
>> >> >> BookmarkTreeNode that doesn't have a URL (i.e. a folder)?
>>
>> >> >> chrome.bookmarks.search does not work for non-URL bookmarks (always
>> >> >> returns false)
>>
>> >> >> The following code is fugly, and doesn't work:
>>
>> >> >> try {
>> >> >>         chrome.bookmarks.get(folderID,
>> >> >> function(){console.log('found')});} catch(e) {
>>
>> >> >>         console.log('not found');
>>
>> >> >> }
>>
>> >> >> So, what is the recommended way to test for existence of a
>> >> >> BookmarkTreeNode that doesn't have a URL (i.e. a folder)?
>>
>> >> >> - rich
>>
>> >> > --
>>
>> >> > You received this message because you are subscribed to the Google
>> >> > Groups "Chromium-extensions" group.
>> >> > To post to this group, send email to
>> >> > [email protected].
>> >> > To unsubscribe from this group, send email to
>> >> > [email protected].
>> >> > For more options, visit this group
>> >> > athttp://groups.google.com/group/chromium-extensions?hl=en.
>>
>> > --
>>
>> > You received this message because you are subscribed to the Google
>> > Groups "Chromium-extensions" group.
>> > To post to this group, send email to
>> > [email protected].
>> > To unsubscribe from this group, send email to
>> > [email protected].
>> > For more options, visit this group
>> > athttp://groups.google.com/group/chromium-extensions?hl=en.
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "Chromium-extensions" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/chromium-extensions?hl=en.
>
>
>

--

You received this message because you are subscribed to the Google Groups 
"Chromium-extensions" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/chromium-extensions?hl=en.


Reply via email to