Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将异步操作合并为一个同步操作_Javascript_Promise - Fatal编程技术网

Javascript 将异步操作合并为一个同步操作

Javascript 将异步操作合并为一个同步操作,javascript,promise,Javascript,Promise,我需要异步调用多个API,并组合所有API的结果并返回它。这里的问题是,无论在哪里使用,我都需要将这个完整的方法作为同步方法使用。 注意:我不能使用任何库/框架 function op1() { return new Promise((resolve, reject) => { setTimeout(() => { resolve({ firstName: "Nikhil"

我需要异步调用多个API,并组合所有API的结果并返回它。这里的问题是,无论在哪里使用,我都需要将这个完整的方法作为同步方法使用。
注意:我不能使用任何库/框架

function op1() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({
                firstName: "Nikhil"
            });
        }, 1000);
    });
}

function op2() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({
                lastName: "Goyal"
            });
        }, 500);
    });
}

function getName() {
    // Some implementation here
}

const name = getName();
console.log(name.firstName);
console.log(name.lastName);

尝试使用
async
wait

function op1() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({
                firstName: "Nikhil"
            });
        }, 1000);
    });
}

function op2() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({
                lastName: "Goyal"
            });
        }, 500);
    });
}

async function getName() {
    const a = await op1();
    const b = await op2();
return {firstName: a.firstName, lastName: b.lastName}

}

getName().then(name=> {
console.log(name.firstName);
console.log(name.lastName);
}
);

还有一个.Promise.all()在结尾还将返回一个异步的承诺。我想要一个能以同步方式解决的东西。如果我使用Promise.all(),那么我需要使用getName().then(回调)。我需要使用与我所演示的类似的方法。
getName()
将无法为您返回对象,它需要返回一个承诺或使用组合值调用某种回调(您无法“打破”异步模式)@NikhilGoyal Yes。您将
等待
,就像使用声明为
async
的函数一样。例如,
const results=wait Promise.all([op1(),op2()])
,然后对
结果中的值执行任何您需要执行的操作
“我需要将此完整方法用作同步”-这显然是不可能的。修复使用此方法处理异步的代码,这是无法避免的。
function op1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({
        firstName: "Nikhil"
      });
    }, 1000);
  });
}

function op2() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve({
        lastName: "Goyal"
      });
    }, 500);
  });
}

const getName = async () => {
  return Promise.all([op1(), op2()]).then((res) => {
    return {...res[0], ...res[1]};
  });
}

getName().then((name) => {
  console.log(name.firstName);
  console.log(name.lastName);
});