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