【发布时间】:2014-09-17 06:04:33
【问题描述】:
我不是那么有经验/优雅的程序员。我希望我的问题可以理解。
我大部分时间都在使用 java/c++,所以我的思想是面向对象的。然后我学习了python,我非常享受功能性思维。现在我正在接近js。它具有挑战性,因为它是基于函数的(我非常喜欢它)、函数式(带有下划线,我有很多 pythonic iterutils 方法)和异步(很痛苦)。
很多时候我都有一些后端同步流程,例如:
if exist(user):
foo(user)
# ok
else:
add(user)
# user added
现在我必须用所谓的回调地狱来处理这个问题:
exists(user, function(userExist) {
if( userExist ) {
foo( user, function(fooResult) {
/* ok */
});
} else {
add( user, function(addResult) {
/* user added */
});
}
});
有时控件更嵌套:检查令牌,如果令牌有效检查用户是否存在,如果用户存在检查有效参数,然后检查用户的 foo 中是否有错误等...
这些控件只是同步的和命令式的。没有什么可说的了。虽然使用像 python 这样的同步语言,但我可以使用返回值的小函数来处理(不优雅但至少)可读代码,而使用 javascript,我不知道如何在可读的小函数中重构事物。我写的所有函数都没有任何return 语句,只有callback(something_weird_defined_in_caller_function),我迷失了自己。
我不认为 promise 对我的情况有好处,因为更多的是用于管道事件,IIUC。所以我正在寻找一些使用async 库来处理这种情况的模式:
- 只有在前一个成功的情况下才能继续执行一系列函数。
如有任何帮助,我们将不胜感激。
【问题讨论】:
-
那就是承诺的用途。该事件是对异步调用的响应。
标签: javascript asynchronous conditional-statements promise