在执行另一个回调后解决承诺
Resolving a promise after another callback is executed
我需要为函数 A 实现以下用法
functionA(url).then((result) => process(result))
问题在于,为了得到result
,函数A在内部调用了一个异步函数B,而从函数B中得到result
的唯一方法是通过回调。
我知道下面的解决方案肯定是错误的,因为它 return 未定义,但我认为这可能是一个好的开始
async function functionA(url) {
return new Promise((resolve, reject) => {
let outerResult
const callback = (result) => {
outerResult = result
}
functionB(url, callback)
resolve(outerResult)
})
}
PS:函数 B 只能通过回调 return 值的原因是它将其对结果的请求添加到请求集合中,并根据请求的优先级然后被解雇。除了从 functionB.
回调到 return result
之外,我想不出任何其他方式
因为 functionA
returns 一个 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));
我需要为函数 A 实现以下用法
functionA(url).then((result) => process(result))
问题在于,为了得到result
,函数A在内部调用了一个异步函数B,而从函数B中得到result
的唯一方法是通过回调。
我知道下面的解决方案肯定是错误的,因为它 return 未定义,但我认为这可能是一个好的开始
async function functionA(url) {
return new Promise((resolve, reject) => {
let outerResult
const callback = (result) => {
outerResult = result
}
functionB(url, callback)
resolve(outerResult)
})
}
PS:函数 B 只能通过回调 return 值的原因是它将其对结果的请求添加到请求集合中,并根据请求的优先级然后被解雇。除了从 functionB.
回调到 returnresult
之外,我想不出任何其他方式
因为 functionA
returns 一个 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));