JS-如何挂接到来自其他文件的成功和错误回调中

时间:2018-12-14 00:55:06

标签: javascript asynchronous callback promise

我的JS设置如下。

App1.js

function x(){
  thirdPartyLibrary.performAsyncTask((resultObject, errorObject) => {
    // This is a callback function, invoked when performAsyncTask is done.
    // I can handle resultObject and errorObject here.
  });
}

假设我还有其他文件作为此应用程序的一部分。它们每个都调用x(),并根据对x()的调用结果调用它们自己的handleSuccess()或handleError()函数的版本。

如何构造对x()的调用,以实现此目的?几乎就像我想“监听”来自App1.js的performAsyncTask()的结果一样,但是我不确定该怎么做。

2 个答案:

答案 0 :(得分:1)

x返回一个Promise,如果没有错误,则以resultObject进行解析;如果存在错误,则以errorObject进行拒绝。然后,x的调用者可以将.then链接到Promise上以处理成功,并链接.catch来处理失败:

function x(){
  return new Promise((resolve, reject) => {
    thirdPartyLibrary.performAsyncTask((resultObject, errorObject) => {
      if (errorObject) reject(errorObject);
      else resolve(resultObject);
    });
  });
}

x()
  .then(result => {
    // handle successful result
  })
  .catch(err => {
    // handle error
  });

答案 1 :(得分:1)

如果您需要保留回调(由于非常老的JS客户端或其他原因),则可以将回调作为参数提供给x

function x(myCallback) {
  thirdPartyLibrary.performAsyncTask(myCallback);
}

// other file:
x((resultObject, errorObject) => {
  // handle just like before
});

您甚至可以根据结果将其更改为两个回调。最后只会调用您的一个回调:

function x(successCallback, errorCallback) {
  thirdPartyLibrary.performAsyncTask((resultObject, errorObject) => {
    if (errorObject) return errorCallback(errorObject);
    else return successCallback(resultObject);
  });
}

// other file:
x(
  function handleSuccess(resultObject) {
    // handle success
  },
  function handleError(errorObject) {
    // handle error
  }
);