gpt4 book ai didi

javascript - 不使用异步等待的异步等待

转载 作者:行者123 更新时间:2023-11-29 10:58:29 26 4
gpt4 key购买 nike

我正在尝试将我的代码从使用 Async/Await 方法转换为基本的 .then() promise 。原因是 Async/Await 在 IE 上不起作用。我是 promises 的新手,来晚了,终于掌握了使用 Async/Await 的窍门,但现在需要稍微及时转换一下,以使我的代码在 IE 中运行。

使用 Async/Await 的工作代码 here在 Codepen.io 上

如有任何帮助,我们将不胜感激。

Javascript 尝试不使用 Async/Await:

const getPromise = () => {  
return new Promise((resolve, reject) => {
setTimeout(() => {
$.getJSON( countriesUrl, function( data ) {
}).done(function(data){
resolve(data);
}).fail(function(error){
var reason = new Error('mom is not happy today');
reject(reason);
});
}, 500);
});
};


var bcp = {
init: function(){
bcp.topbar = parseInt($('.topbar').css('height'), 10);
bcp.bottombar = parseInt($('.bottom-bar').css('height'), 10);
if(!bcp.countriesLoaded){
console.log('testing');
bcp.addCountries().then((countries) => {
console.log('hello');
bcp.popup = $($.fancybox.getInstance().current.src)[0];
bcp.distributorArrays(countries);
});
}else {
bcp.addEventListeners();
}
},
toggleCountrySection: function(){
$('#locationModal').find('.loading').toggleClass('show');
$('.content').toggle();
},
getCountries: function() {
console.log('get Countries');
bcp.toggleCountrySection();
},
addCountries: function() {
(() => {
getPromise()
.then(result => {
console.log('result', result);
var data = result;
return data;
}).then(function(data){
var countries = data;
bcp.toggleCountrySection();
bcp.countriesLoaded = true;
console.log('test', countries);
return countries;
})
.catch(err => {
console.log(err);
});
})();
};

我从未收到 console.log('hello')。所以我的函数 bcp.addCountries().then((countries) => {}) 没有重新运行,或者我觉得我没有正确使用 .then()。

这是我使用 Async/Await 的工作代码:

init: function(){
bcp.topbar = parseInt($('.topbar').css('height'), 10);
bcp.bottombar = parseInt($('.bottom-bar').css('height'), 10);
if(!bcp.countriesLoaded){
bcp.addCountries().then((countries) => {
bcp.popup = $($.fancybox.getInstance().current.src)[0];
bcp.distributorArrays(countries);
});
}else {
bcp.addEventListeners();
}
},
toggleCountrySection: function(){
$('#locationModal').find('.loading').toggleClass('show');
$('.content').toggle();
},
getCountries: function() {
console.log('get Countries');
bcp.toggleCountrySection();
return new Promise(resolve => {
setTimeout(() => {
$.ajax({
url: countriesUrl,
success: function(data) {
var results = JSON.parse(data);
resolve(results);
}
});
}, 1500);
});
},
addCountries: async function() {
var countries = await bcp.getCountries();
bcp.toggleCountrySection();
bcp.countriesLoaded = true;
return countries;
},

最佳答案

获取工作版本(来自您的评论 这是我使用 Async/Await 的工作代码:)并将 addCountries 更改为此。

使用的答案:

return bcp.getCountries().then((countries) => {
console.log('test', countries);
bcp.toggleCountrySection();
bcp.countriesLoaded = true;
return countries;
});

关于javascript - 不使用异步等待的异步等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51953585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com