Javascript 循环内的返回相关承诺

Javascript 循环内的返回相关承诺,javascript,arrays,Javascript,Arrays,我正在研究shopify集成。 我们收到一个数组项,然后循环遍历它们并向它们添加一个新模型(func1),然后我需要使用第一个数组项的结果并将其添加到一个计划(func2) 我需要这个函数按顺序运行,因为我要将结果添加到计划中,如果我有两个相同日期的结果,但它们在数据库中不存在,如果它们并行运行,则会在数据库中创建两个单独的条目,而不是一个具有两个值的条目 我需要返回的方式是func1,func2,func1,func2 但目前正在返回func1,func1…func2,func2 这是我需要完

我正在研究shopify集成。 我们收到一个数组项,然后循环遍历它们并向它们添加一个新模型(func1),然后我需要使用第一个数组项的结果并将其添加到一个计划(func2)

我需要这个函数按顺序运行,因为我要将结果添加到计划中,如果我有两个相同日期的结果,但它们在数据库中不存在,如果它们并行运行,则会在数据库中创建两个单独的条目,而不是一个具有两个值的条目

我需要返回的方式是func1,func2,func1,func2

但目前正在返回func1,func1…func2,func2

这是我需要完成的一个简化示例

 const func2 = () => {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          return console.log('func2');
        }, 3000);
      });
    };

const func1 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('Func1');
      func2();
    }, 1000);
  });
};

const array = [1, 2, 3, 4, 5];

const test = () => {
  array.map(x => {
    func1();
  });
};
test();
如果有什么不清楚的,请告诉我。
谢谢

您可以使用async/await和for循环来创建类似同步的迭代。在你的函数1中再次使用它,以便重新恋爱

constfunc2=()=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
console.log('func2');
解决();
}, 3000);
});
};
常量func1=()=>{
返回新承诺((解决、拒绝)=>{
setTimeout(异步()=>{
console.log('Func1');
等待函数2();
解决();
}, 1000);
});
};
常量数组=[1,2,3,4,5];
常量测试=异步()=>{

对于(设i=0;i这是使用函数的最佳位置:

常量遍历=(xs,f)=>xs.reduce((promise,x)=>
promise.then(ys=>f(x).然后(y=>promise.resolve(ys.concat([y])),
承诺。决心([]);
const times2=x=>newpromise(解析=>setTimeout(()=>{
console.log(“times2”,x);
解析(2*x);
}, 1000));
const minus1=x=>新承诺(解析=>设置超时(()=>{
console.log(“减1”,x);
解析(x-1);
}, 1000));
常数xs=[1,2,3,4,5];
常数ys=遍历(xs,x=>times2(x)。然后(minus1));
ys.then(console.log);//[1,3,5,7,9]
const func2=async(modalValue)=>{
设结果=modalValue*5;
log(`Function2 result:${result}`)
返回结果;
};
异步函数getModalValue(i){
//代码的其余部分
返回{modal:i*2}
}
常量func1=异步(项)=>{
让{modal}=等待getModalValue(项);
log(`Function1 modal:${modal}`)
等待功能2(模态);
};
常量数组=[1,2,3,4,5];
常量测试=异步()=>{
for(设i=0;i{console.log(“Completed”)})

.catch((err)=>{console.log(“failure”)}
您不能从setTimeout返回。您有承诺并且不调用resolve?
func2()。如果您不希望对
setTimeout
的回调是
异步的,那么(resolve)
也可以工作。