Javascript 从异步语句获取所有值

Javascript 从异步语句获取所有值,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,我有3个功能: 首先只返回值 第二个调用setTimeout 第三,以价值回报承诺 我无法触摸这3个功能。 这是: const A = "A"; const B = "B"; const C = "C"; function getA() { return A; } function getB(callback) { setTimeout(() => { callback(B); }, 10); } fun

我有3个功能:

首先只返回值

第二个调用setTimeout

第三,以价值回报承诺

我无法触摸这3个功能。

这是:

const A = "A";
const B = "B";
const C = "C";

function getA() {
  return A;
}

function getB(callback) {
  setTimeout(() => {
    callback(B);
  }, 10);
}

function getC() {
  return Promise.resolve().then(() => C);
}
我需要创建一个函数,它将返回数组中所有三个函数的输出

到目前为止,我试过:

function getABC() {
  return new Promise((resolve, reject) => {
    let a = getA();
    let b = getB(B => B);
    let c = getC().then(() => C);
    let arr = [a, b, c];
    resolve(arr);
  }).then((arr) => arr);
}

getABC().then((arr) => console.log(arr));
它应该返回
['A','B','C']
,但是它返回
['A',未定义,Promise{}]


我尝试了不同的方法,但都是错误的。

以下是一种方法:

const A=“A”;
常数B=“B”;
常数C=“C”;
函数getA(){
返回A;
}
函数getB(回调){
设置超时(()=>{
撤回(B);
}, 10);
}
函数getC(){
返回Promise.resolve(),然后(()=>C);
}
函数getABC(){
//这用于从函数getB中提取值
常量obj={};
常数cb=(b)=>obj.b=b;
getB(cb);
//回调cb将仅在10毫秒内调用,这就是为什么存在
//此处超时以等待提取值b
返回新承诺((解决、拒绝)=>{
setTimeout(()=>resolve(getC().then(c=>[getA(),obj.b,c])),10;
});
}
//另一种方法:包装函数getB,然后使用Promise.all
函数getABC2(){
函数wrapGetB(){
常量obj={};
常数cb=(b)=>obj.b=b;
getB(cb);
返回新承诺((解决、拒绝)=>{
setTimeout(()=>resolve(obj.b),10);
});
}
返回Promise.all([getA(),wrapGetB(),getC()]);
}
getABC().then((arr)=>console.log(arr));

getABC2().then(console.log)最简单的方法似乎是将其添加到原始代码中,正如上面@rksh1997所建议的那样

Promise.all([
    getA(),
    new Promise(getB), // callback == 'resolve()'
    getC(),
]).then(console.log);

您的
getB()
函数没有返回值。@非常抱歉,我忘了提到我可以;t触摸这3个函数,有没有一种方法可以在不改变getA、getB和getC函数的情况下进行操作?谢谢你,你只需要承诺getB,然后使用Promise.allside注意:
。然后((arr)=>arr)
什么都不做,最好是removed@rksh1997这很有趣,但是你能帮我写代码吗。我不知道如何以正确的方式意识到这一点。