我的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()的结果一样,但是我不确定该怎么做。
答案 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
}
);