2

我正在做一个演示,展示使用rsvp.js的 Promise 中的错误处理。一切似乎都很好,直到我在标签中使用了 rsvp.js 的 CDN url。现在,由于我的应用程序中有用于模块加载的 require.js,因此我尝试通过 require js 语法加载 rsvp.js 模块。在 Chrome 网络选项卡中,我看到 rsvp.js 模块也被正确加载,但我在控制台中收到以下错误,

未捕获的 ReferenceError:未定义 RSVP。

require(["bootstrap","js/rsvp"], function(bootstrap,rsvp) { 
$(document).ready(function () {
    function getEmployeeDetails() {
        var radioValue1 = $("input[name='option1']:checked").val();
        var requrl;
        if (radioValue1 == "fail") {
            requrl = "../../../testservice/getEmployeeIdss";
        } else {
            requrl = "../../../testservice/getEmployeeId";
        }
        return new RSVP.Promise(function (resolve, reject) {
            $.ajax({
                url: requrl,
                success: function (response) {
                    try {
                        $('#successBoard').append("<b> <i> Ajax Call 1 Succeeded! </i>  </b><br/>" + "Employee ID:" + response.stuId + "<br/>");
                        resolve(response.stuId);
                    } catch (e) {
                        reject(e);
                    }
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    console.log('Ajax 1 failed : Rejecting Promise 1');
                    $('#errorBoard').append("<b> <i> Ajax 1 failed : Rejecting Promise 1</i>  </b><br/>");
                    reject(thrownError);
                }
            });

        });
    }
4

2 回答 2

2

我看了一下RSVP的源代码,发现了这段代码:

/* global define:true module:true window: true */
if (typeof define === 'function' && define['amd']) {
  define(function() { return RSVP; });
} else if (typeof module !== 'undefined' && module['exports']) {
  module['exports'] = RSVP;
} else if (typeof platform !== 'undefined') {
  platform['RSVP'] = RSVP;
}

第一个if是 RSVP 检测到它在 AMD 环境中运行并注册为 AMD 模块。所以你不会有一个全局的RSVP.

现在,在您的代码中,您需要 RSVP 并将其绑定到rsvp变量,全部小写。所以它可以作为 访问rsvp,而不是RSVP。将其称为rsvp或更改您传递给的函数中的变量名称require,使其为RSVP

require(["bootstrap", "js/rsvp"], function (bootstrap, RSVP) { 

请注意,引用 Bootstrap 是没有意义的,因为它会将自身安装为 jQuery 插件,因此您可以这样做:

require(["js/rsvp", "bootstrap"], function (RSVP) { 
于 2015-05-07T10:31:28.027 回答
0

你还没有定义RSVP,你已经包含了 rsvp 库,但是将它设置为变量rsvp而不是RSVP,所以当你调用RSVP.Promise()它时会抛出错误。
基本用法通过 - https://github.com/tildeio/rsvp.js/-

var RSVP = require('rsvp');
var promise = new RSVP.Promise(function(resolve, reject){});
于 2015-05-07T08:49:09.313 回答