在执行另一个回调后解决承诺

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