Javascript 在执行另一个回调后解析承诺
我需要为functionA实现以下用法Javascript 在执行另一个回调后解析承诺,javascript,asynchronous,async-await,promise,callback,Javascript,Asynchronous,Async Await,Promise,Callback,我需要为functionA实现以下用法 functionA(url).then((result) => process(result)) 问题在于,为了获取结果,functionA在函数B内部调用了一个异步函数B,而从函数B中获取结果的唯一方法是通过回调 我知道下面的解决方案肯定是错误的,因为它返回undefined,但我认为这可能是一个好的开始 async function functionA(url) { return new Promise((resolve, reject)
functionA(url).then((result) => process(result))
问题在于,为了获取结果
,functionA在函数B内部调用了一个异步函数B,而从函数B中获取结果
的唯一方法是通过回调
我知道下面的解决方案肯定是错误的,因为它返回undefined,但我认为这可能是一个好的开始
async function functionA(url) {
return new Promise((resolve, reject) => {
let outerResult
const callback = (result) => {
outerResult = result
}
functionB(url, callback)
resolve(outerResult)
})
}
PS:functionB只能通过回调返回值的原因是它将结果请求添加到请求集合中,然后根据优先级触发请求。除了从functionB返回
结果
之外,我想不出任何其他方法。因为functionA
返回承诺并且不使用Wait
它不是async
由于functionB
接受回调,您只需传递resolve
函数即可
使用箭头功能:
函数b(url、cb){
//模拟一些回调行为
cb(`${url}+10`);
}
函数函数(url){
返回新承诺((解决、拒绝)=>{
函数B(url,(结果)=>{
决心(结果);
});
});
}
功能过程(结果){
控制台日志(结果);
}
functionA(“sample.com”)。然后((结果)=>过程(结果))代码>为什么不在回调中解析(结果)
而不是outerResult=result
?在当前代码中,resolve(outerResult)
总是在回调之前运行,因此承诺总是解析为undefined。您在这里询问的似乎是“我如何承诺functionB
?”,或者通常是“我如何承诺回调函数?”只是返回新承诺(解析)=>{functionB(url,resolve);}
!不要“在解决问题之前做点什么”。在解析后,在然后处理程序中执行您必须执行的任何操作。