【发布时间】:2018-09-05 12:42:23
【问题描述】:
我想在 JavaScript/ES5 中进行条件异步函数调用。
假设我有一个模块 myService 和一个函数 myAsyncFunction,它在内部执行一些逻辑并返回结果并带有如下回调:
myService.myAsyncFunction(param1, param2, (error, success) => {
if (error) {
// handle error
return;
}
// handle success
});
但在某些情况下,我希望它直接陷入“处理成功”而不运行myService.myAsyncFunction内部的逻辑,这可能需要一些时间和资源。
我想象的最直接的方法是创建一个模拟myService.myAsyncFunction 的虚拟函数并调用没有错误的回调,如下所示:
var myGenericFunction;
if ( /* I would like to skip unnecessary logic */) {
myGenericFunction = function (param1, param2, callback) {
callback(null);
}
} else {
myGenericFunction = myService.myAsyncFunction;
}
myGenericFunction(param1, param2, (error, success) => {
if (error) {
// handle error
return;
}
// handle success
});
这就是我最终得到的结果,但我想在语法和性能方面应该有更好的方法。你有什么建议吗?
注意:ES6 上的Promise.resolve 可以提出直接落入成功案例的解决方案,但我想知道 ES5 解决方案是什么。
【问题讨论】:
-
我不明白,你要不要使用 Promises?你有 ~2 个选择:使用回调或使用 Promises(也许是 async/await)。请选择一个。无论如何,如果您选择异步方法,则必须始终保持异步。
-
@zero298 不,我不想使用 Promise。我提到它是因为我想让你知道我知道“承诺”的方式,但更喜欢 ES5 解决方案。
-
所以,我从问题的标题中删除了“承诺”,以免引起混淆,如果这是投反对票的原因。
标签: javascript asynchronous promise conditional ecmascript-5