我正在编写一个演示,演示如何使用rsvp.js实现承诺中的错误处理。一切看起来都很好,直到我在标签中使用了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);
}
});
});
}发布于 2015-05-07 10:31:28
我看了一下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-07 08:49:09
您没有定义RSVP,您已经包含了rsvp库,但是将它设置为变量rsvp而不是RSVP,所以当调用RSVP.Promise()时它会抛出错误。
基本用法通过- https://github.com/tildeio/rsvp.js/-
var RSVP = require('rsvp');
var promise = new RSVP.Promise(function(resolve, reject){});https://stackoverflow.com/questions/30095991
复制相似问题