【发布时间】:2018-07-09 21:31:00
【问题描述】:
我目前正在为浏览器编写代码,并且仅限于使用 ES5。我确实可以访问 jQuery,但我需要重写几个当前使用 ES6 Promise 的大型函数。例如:
function getLocationFromIp() {
return new Promise(function (resolve, reject) {
$.ajax({
url: someUrl,
data: {},
xhrFields: {
withCredentials: true
},
success: function (data) {
resolve(data);
},
error: function (err) {
reject(err);
}
});
}).then(transformIpGeoDataToLocation);
}
我知道我可以访问.resolve() 和.reject(),但我正在为实施而苦苦挣扎。它看起来像这样吗?
function getLocationFromIp() {
return $.Deferred(function (dfr) {
$.ajax({
url: someUrl,
data: {},
xhrFields: {
withCredentials: true
},
success: function (data) {
dfr.resolve(data);
},
error: function (err) {
dfr.reject(err);
}
});
}).promise().then(transformIpGeoDataToLocation);
}
我也在研究 bluebird 作为后备方案,但我想尝试一下这种方法,谢谢!不幸的是,Babel 和其他转译器不是一个选项。
【问题讨论】:
-
查看自动转译步骤以将您的 ES6 转换为 ES5,例如与Babel。这可能会让您的生活更轻松。
-
我们不会在这个项目中使用 Babel 或其他转译器,抱歉我忘了提。
-
return $.ajax(...我的意思是......不要过于复杂。一开始你不需要new Promise。 -
jQuery 的哪个版本?
-
我几乎不会认为 -1 会被遗忘。我有一个 -21 问题
标签: javascript jquery promise ecmascript-5 geo