我需要为functionA实现以下用法
functionA(url).then((result) => process(result))
问题在于,为了获得result
,functionA 调用了内部的异步functionB,而从functionB 中获取result
的唯一方法是通过回调。
我知道以下解决方案肯定是错误的,因为它返回 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 返回 result
的回调之外,我想不出任何其他方法。
答案 0 :(得分:2)
由于 functionA
返回一个 Promise 并且不使用 await
,所以它不是 async
。
由于 functionB
需要回调,因此您只需传递 resolve
函数即可。
或者带有箭头功能:
function functionB(url, cb) {
// Simulate Some Callback Behaviour
cb(`${url} + 10`);
}
function functionA(url) {
return new Promise((resolve, reject) => {
functionB(url, (result) => {
resolve(result);
});
});
}
function process(result) {
console.log(result);
}
functionA("sample.com").then((result) => process(result));
或者,只需将 resolve
作为回调传递:
function functionB(url, cb) {
// Simulate Some Callback behaviour
cb(`${url} + 10`);
}
function functionA(url) {
return new Promise((resolve, reject) => {
functionB(url, resolve);
});
}
function process(result) {
console.log(result);
}
functionA("sample.com").then((result) => process(result));