gpt4 book ai didi

javascript - 让 promise 在 JavaScript switch/case 中工作

转载 作者:搜寻专家 更新时间:2023-11-01 04:29:44 25 4
gpt4 key购买 nike

我有一个问题(老实说,有两个问题)让一个 promise 或一个回调在 switch-case 中工作。这是基本代码。

switch (page) {

case 'contact':

alert('contact in switch');

var promise = $.get(page +'.json');
promise.then(function(data){
console.log("Items back! ", data);
});

break;
.......

console.log("Response data: ", data); // This is undefined

我知道由于异步函数的性质,开关在数据返回之前落入 break,使得 data 记录为 undefined 。所以我认为将 break 放在回调中会起作用,但事实并非如此。当我这样做时,应用程序完全停止工作。

所以我想我的第一个问题是如何让 switch-case “等待”直到数据返回,然后再 break

我遇到的第二个问题是,我最终希望能够重用我的 switch,方法是将它包装在一个函数中,其中 page 参数是页面的标题用户正在导航到,回调将传回从 getPageData 函数返回的数据。当我尝试这样做时,它会导致 pageContentLoader 函数的回调出现 undefined 错误。

请注意,下面代码中的 getPageData 是一个单独的函数,它执行一个通用的 XMLHttpRequest。它工作正常,因为数据已正确记录在回调中。

pageContentLoader(page, function(data) {
console.log("Back with data ", data);
});

function pageContentLoader(page, callback){
var data;

switch (page) {
case 'contact':
console.log('contact in switch');
getPageData(page,function(data){
console.log("Contacts back! ", data);
});
break;
case 'blog':
console.log('blog in switch');
getPageData(page,function(data){
console.log("Posts back! ", data);
});
break;
default:
alert('hey that page doesn't exist!');
}
callback(data); // results in callback undefined!!
}

我确信有可能完成这项工作,但到目前为止,我已经尝试了所有我能找到的方法,但没有任何运气。如果有人有任何指示或想告诉我我在代码中做错了什么,我将不胜感激!

最佳答案

刚刚遇到这个问题,解决方法如下:

async getResolvedPromises(myObject) {
const promises = await Object.keys(myObject).map(async (k) => {
switch (k) {
case '1':
const firstPromise = await asyncCallNumber1()
return firstPromise
case '2':
const secondPromise = await asyncCallNumber2()
return secondPromise
case '3':
const thirdPromise = await asyncCallNumber3()
return thirdPromise
default:
return
}
})

const data = await Promise.all(promises)
return data
}

关于javascript - 让 promise 在 JavaScript switch/case 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185880/

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