Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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 if语句中的同步多承诺_Javascript_Promise_Es6 Promise - Fatal编程技术网

Javascript if语句中的同步多承诺

Javascript if语句中的同步多承诺,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我的函数在完成if中的承诺之前结束。 其思想是能够以同步方式执行承诺(这是必要的),因为当对象返回时,它是完整的,并且所有承诺都已完成 let var1 = ''; let var2 = ''; let var3 = ''; if(condition1){ promise1().then(result =>{ var1 = result; ) } if(condition2){ promise2().then(result =>{ var2 = res

我的函数在完成if中的承诺之前结束。 其思想是能够以同步方式执行承诺(这是必要的),因为当对象返回时,它是完整的,并且所有承诺都已完成

let var1 = '';
let var2 = '';
let var3 = '';

if(condition1){
  promise1().then(result =>{
    var1 = result;
  )
}

if(condition2){
  promise2().then(result =>{
    var2 = result;
  )
}

if(condition3){
  promise2().then(result =>{
    var3 = result;
  )
}

let object = {
  var1: var1,
  var2: var2,
  var3: var3
}

resolve(object);
我最初使用的是
Promise.all
,但它不起作用,函数返回对象时没有完成承诺。这是我的实现

let var1 = '';
let var2 = '';
let var3 = '';
let array_promises = [];
if(condition1){
  promise1().then(result =>{
    var1 = result;
    array_promises.push(result);
  )
}

if(condition2){
  promise2().then(result =>{
    var2 = result;
    array_promises.push(result);
  )
}

if(condition3){
  promise2().then(result =>{
    var3 = result;
    array_promises.push(result);
  )
}
.
.
.


Promise.all(array_promises).then(()=>{
  let object = {
   var1: var1,
   var2: var2,
   var3: var3
   .
   .
   .
  }
  resolve(object);
});
它也不起作用。返回对象而不完成承诺的执行。
我不想使用任何第三方npm或类似的东西。有任何指导或建议吗?我可能做错了什么

你需要调用
承诺。承诺数组中的所有
——如果数组中不包含实际承诺,那么承诺就不存在了。所有都不会等待任何事情,并且会尽快解决。你的
数组\u promises
不是一个
Promise
数组,它只是一个可能被推到的值数组。尝试调用
Promise。所有承诺上的
都将改为:

const condition1=true;
const condition2=false;
const condition3=真;
const promise1=()=>新承诺(resolve=>setTimeout(resolve,200,'p1');
const promise2=()=>新承诺(resolve=>setTimeout(resolve,200,'p2');
const promise3=()=>新承诺(resolve=>setTimeout(resolve,200,'p3');
我保证(([
条件1?承诺人1():“”,
条件2?承诺2():“”,
条件3?承诺3():“”,
])).然后([var1,var2,var3])=>{
常量returnObj={
var1,
var2,
var3,
};
控制台日志(returnObj);

})
您需要调用
承诺。承诺数组中的所有承诺-如果该数组不包含实际承诺,则承诺。所有承诺都不会等待任何事情,并将尽快解决。你的
数组\u promises
不是一个
Promise
数组,它只是一个可能被推到的值数组。尝试调用
Promise。所有承诺上的
都将改为:

const condition1=true;
const condition2=false;
const condition3=真;
const promise1=()=>新承诺(resolve=>setTimeout(resolve,200,'p1');
const promise2=()=>新承诺(resolve=>setTimeout(resolve,200,'p2');
const promise3=()=>新承诺(resolve=>setTimeout(resolve,200,'p3');
我保证(([
条件1?承诺人1():“”,
条件2?承诺2():“”,
条件3?承诺3():“”,
])).然后([var1,var2,var3])=>{
常量returnObj={
var1,
var2,
var3,
};
控制台日志(returnObj);

})
存在一些语法错误,您可能需要修复这些错误?已更新。是的,我对if语法有点问题。你们是指串行方式,还是串行方式?承诺不是同步的,也不能是同步的,因为它们本质上是异步的。在Javascript中,将值从异步回调分配到更高的范围,就像执行
var1=result
时那样,然后尝试在异步回调之外使用
var1
几乎总是错误的。这通常是一个警告信号,表明您做错了事情。此外,向我们展示实际执行某些实际异步操作的真实代码通常会得到比编写一些不做任何操作的代码更有用的答案。在许多情况下,当您向我们展示真实代码时,我们可以向您展示比您可能从伪代码的理论答案中了解到的更好的编码方法。有一些语法错误,您可能希望修复这些错误。是的,我对if语法有点问题。你们是指串行方式,还是串行方式?承诺不是同步的,也不能是同步的,因为它们本质上是异步的。在Javascript中,将值从异步回调分配到更高的范围,就像执行
var1=result
时那样,然后尝试在异步回调之外使用
var1
几乎总是错误的。这通常是一个警告信号,表明您做错了事情。此外,向我们展示实际执行某些实际异步操作的真实代码通常会得到比编写一些不做任何操作的代码更有用的答案。在许多情况下,当您向我们展示真实代码时,我们可以向您展示比您可能从伪代码的理论答案中找到的更好的编码方法。超准确和干净的响应。谢谢。回答非常准确和干净。非常感谢。