Javascript 在resolve中返回另一个aysnc函数

Javascript 在resolve中返回另一个aysnc函数,javascript,promise,Javascript,Promise,我有这样一个函数调用: await someFunction(foo); 使用someFunction定义如下: const someFunction = foo => { return new Promise((resolve, reject) => { if (foo) { return resolve(someOtherPromise()); } reject(); } } 这是有效代码吗?我已经测试过了,看起来还可以 如果foo

我有这样一个函数调用:

await someFunction(foo);
使用
someFunction
定义如下:

const someFunction = foo => {
  return new Promise((resolve, reject) => {
    if (foo) {
      return resolve(someOtherPromise());
    }
    reject();
  }
}
这是有效代码吗?我已经测试过了,看起来还可以


如果
foo
true
,则
wait someFunction()
将转换为
wait someOtherPromise()
是否正确,即它是否会继续等待
someOtherPromise
解决问题?

我已经编写了一些测试代码,看看它是否正确:

constsomefunction=foo=>{
返回新承诺((解决、拒绝)=>{
如果(foo){
返回决议(someOtherPromise(2000));
}
拒绝();
});
}
const someOtherPromise=async(ms)=>{
返回新承诺(resolve=>setTimeout(()=>{
log(“我将在其他承诺中解决”);
解决();
},ms);
}
const run=async()=>{
等待某个函数(“foo”);
log('完成等待someFunction');
}

run()我已经编写了3个函数来测试它

c=()=>新承诺((解决,拒绝)=>{
设置超时(()=>{
console.log('c');
解决();
}, 1000);
});
b=()=>新承诺((解决、拒绝)=>{
设置超时(()=>{
console.log('b');
解析(c());
}, 1000);
});
a=async()=>{
console.log('a before');
等待b();
console.log('after');
};

a()是的,它是有效的代码并且可以工作,但是闻起来像。相反,我建议你写信

function someFunction(foo) {
  if (foo)
    return someOtherPromise();
  else
    return Promise.reject();
}


(最好用消息抛出一个
新错误
,而不是
未定义的

承诺会自动变平,你永远不必处理“承诺中的承诺”-一个
承诺会自动合并为
承诺
@VLAZ返回
解析(someOtherPromise())是否正确
或者只是
返回其他承诺()
就足够了吗?从承诺执行者返回并不能解决问题。您必须调用
resolve
参数。事实上,从承诺返回几乎是不相关的-该值没有在任何地方使用(在本例中),承诺将生成的唯一数据是您传递到
resolve()
。抱歉,我输入错误。忘记返回的
。我需要调用
resolve(someOtherPromise())
还是可以调用
someOtherPromise()
?您是否希望从另一个promise获取值?如果您执行
p1=newpromise(resolve=>resolve(makeAnotherPromise())
(假设
makeAnotherPromise
最终将解析为
42
),那么
等待p1
解析后得到的是
42
。如果执行
p2=newpromise(resolve=>{makeAnotherPromise();resolve()})
p2
将解析为
未定义的
(您不会将任何内容传递给
resolve
),而且
makeAnotherPromise()
可能仍然没有完成。
async function someFunction(foo) {
  if (foo)
    return someOtherPromise();
  else
    throw;
}