满足条件时执行异步函数的方便语法
convenient syntax for executing asynchronous functions if condition is met
最近,为了实现异步函数的执行(async_1,async_2,async_3必须按此顺序执行)
if(async_1_possible)
{
async_1()
.then(function(result_1){
if(async_2_possible)
{
async_2()
.then(function(result_2){
sync(result_2);
async_3(result_1);
});
}
else
{
async_3(result_1);
}
});
}
else
{
if(async_2_possible)
{
async_2()
.then(function(result_2){
sync(result_2);
async_3();
});
}
else
{
async_3();
}
}
代码很快就会变得很丑…我正在寻找一个允许我这样做的语法:
if(async_1_possible){var queue += async_1};
if(async_2_possible){var queue += function(result_1){async_2();}};
if(async_3_possible){var queue += function(result_2){sync(result_2);async_3(result_1)}};
run queue();
edit:修改后的示例,以显示传递承诺结果给下一个,并执行同步函数
编辑2:查看q库,但仍然没有找到一种轻松实现上述过程的方法
请查看控制流库,如async和step。这些可以帮助你组织异步回调和编码复杂的流,这在异步编码中是地狱(例如排队,循环内部有异步函数,等等)
如果您正在使用Q,那么您可以这样做
var funcs = [];
if (async_1_possible) {
funcs.push(async_1);
}
if (async_2_possible) {
funcs.push(async_2);
}
if (async_3_possible) {
funcs.push(async_3);
}
funcs.reduce(Q.when, Q(initialVal));
Q相同
这看起来很愚蠢,但如果你不想为承诺使用特定的库,那么它是有用的,所以我想我将它发布在这里:
var promises_string = "$.when()";
if(async_1_possible)
{promises_string+=".then(function(){return async_1();})";}
if(async_2_possible)
{promises_string+=".then(function(result_1){return async_2();})";}
promises_string+=".then(function(result_2){sync(result_2);
if(sync_3_possible){return async_3;}return $.when();})";}
etc..
eval(promises_string);
在情况下,当你需要一个结果从异步调用2步或更多之前(如async_3(result_1),这失败了,但我想写一个解析器不会太难…
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- jQuery语法添加了var
- Javascript未捕获语法错误意外的标识符错误
- 为什么忽略了eval()代码中的语法错误
- 难以访问的JS环境中的语法错误
- 如何告诉MathJax对下标使用替代语法
- Javascript语法向设置发出sessionStorage值
- 未捕获的语法错误:意外的标记{
- 使用$scope方法时的ControllerAs语法
- "未捕获的语法错误:意外的标记}"
- javascript自执行函数-不同的语法
- 函数的Javascript语法
- WinJS内联绑定语法
- 使用JS函数来使用另一个函数的语法?node.js
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- 有没有针对带有表的JavaScript的Markdown语法解析器
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当使用控制器作为语法时,如何从父指令继承属性
- 满足条件时执行异步函数的方便语法