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

时间:2021-04-23 22:56:47

标签: javascript asynchronous async-await promise callback

我需要为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 的回调之外,我想不出任何其他方法。

1 个答案:

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

相关问题