Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'Parser returned unfilled promise' error in Dojo

I'm getting the following error when using dojo/parser in my code.

parser returned unfilled promise (probably waiting for module auto-load), unsupported by _WidgetsInTemplateMixin.

I've

define([
    "dojo/_base/declare",
    "dijit/_WidgetBase",
    "myApp/base/_TemplatedMixin",
    "dijit/_WidgetsInTemplateMixin",
    "dojo/text!../templates/MyTemplate.html",
    "dojo/i18n!../nls/Localized",
    "myApp/js/utils/hint",
    "dijit/form/ValidationTextBox",
    "dijit/form/SimpleTextarea",
    "dijit/form/Button",
    "dojo/parser",
    "dojo/domReady!"
], function (
    declare,
    _WidgetBase,
    _TemplatedMixin,
    _WidgetsInTemplateMixin,
    template,
    l10n,
    hint
) {

    'use strict';

    /**
     * @module
     */

    return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {

        widgetsInTemplate: true,

        /**
         * @description Localized object for view
         * @type {object}
         */
        l10n: l10n,

        /**
         * @description Custom template for view
         * @override
         */
        templateString: template,


        //postCreate: function () {
            //hint(l10n.hint);
        //}
    });

});

I've done some research and realized it may have to do with dependencies and order. I've added the widgetsIntemplate attribute but still no dice. This only happens on first load of the page.

Can anyone help?

like image 611
streetlight Avatar asked Aug 06 '14 19:08

streetlight


People also ask

What is the dojo parser?

The Dojo Parser is an optional module which is used to convert specially decorated nodes in the DOM and convert them into Dijits, Widgets or other Objects. By decoratedwe mean use of a data-dojo-typeattribute.

What happens when a promise gets stuck in JavaScript?

In case of an error, the promise becomes rejected, and the execution should jump to the closest rejection handler. But there is none. So the error gets “stuck”. There’s no code to handle it.

What happens when a promise is rejected?

But if any of the promises above rejects (a network problem or invalid json or whatever), then it would catch it. The code of a promise executor and promise handlers has an "invisible try..catch " around it. If an exception happens, it gets caught and treated as a rejection.

How do you handle errors in promises?

Error handling with promises 1 Implicit try…catch. The code of a promise executor and promise handlers has an "invisible try..catch " around it. ... 2 Rethrowing. As we already noticed, .catch at the end of the chain is similar to try..catch. ... 3 Unhandled rejections. What happens when an error is not handled? ... 4 Summary. ...


2 Answers

If you have widgets in your template, you have to make sure they are all preloaded. Make sure your define has all the widgets in your template.

like image 64
tik27 Avatar answered Sep 23 '22 02:09

tik27


For future readers: This error message may also be thrown when creating one of the widgets in the template fails to any other reason.

For example I had a dijit/form/FilteringSelect in a template and had a typo in the variable I passed to its store property. So the store was undefined.

It can be quite hard to find the source of this error message sometimes.

  1. Successively remove widgets from the template to identify the one that causes the problem.
  2. Instance the widget programatically inside a try-catch block inside your own buildRendering function to see what is actually going wrong.
like image 23
Jan Schatz Avatar answered Sep 24 '22 02:09

Jan Schatz