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;
}