jQuery的链接和级联,然后是什么时候

丹尼斯·G。

目前,我面前有一个巨大的if-then-else循环,该循环首先从Web服务获取多个容器。然后,它获取所有可用的餐点(针对每个菜单)和所有可用的配菜(针对每个菜单)。然后,对于每餐以及每餐,都要检查所有添加剂并将其汇总。

最后,我有多个菜单,包括餐点,配菜及其所有添加剂。

以下流程图显示了该过程:
在此处输入图片说明

我想美化代码,并想在jQuery中使用Promise-但我不知道该怎么做,因为我必须在athen之后堆叠when(至少我认为,也许我必须这样resolve做)。以下是我的最佳尝试:

//this totally does not work at all, but you get the idea what I want to do
Menus.getCantinas()
       .when(Menus.getMeals(cantinas), Menus.getSides(cantinas)) //when doesn't exist here, neither does cantinas
         .then(Menus.getAdditives(meals, sides) //also throws errors as meals and sides does not exist
           .done(function(cantinas, meals, sides, additives) { //more errors for the people
             Menus.cantinas = cantinas;
             Menus.meals = meals;
             Menus.sides = sides;
             Menus.additives = additives;

             //... some html stuff to build the menus
           });

请务必查看以下代码段,以获取更多说明性代码。

window.Menus = {
	cantinas = {},
	meals = {},
	sides = {},
	additives = {},
	callWebservice: function (listname, filter)
    {
        if (filter && filter != '')
            data['$filter'] = filter;

        return jQuery.ajax({
            url: '/_api/web/lists/getbytitle(\'' + listname + '\')/items',
            data: data,
            dataType: 'json'
        });
    },

	getCantinas: function() {
		return Menus.callWebservice("Cantinas", "");
	},
	
	getMeals: function(cantinas) {
		var filterString;
		for (var i = 0; i < cantinas.length; i++) {
			if (i == 0) {
				filterstring = "ID eq " + cantinas[i];
			}
			else {
				filterstring += " or ID eq " + cantinas[i]
			}
		}
		return Menus.callWebservice("Meals", filterString);
	},
	
	
	getSides: function(cantinas) {
		//see above function for filterstuff
		return Menus.callWebservice("Sides", filterString);
	},
	
	getAdditives: function(meals, sides) {
		for (var i = 0; i < meals.length; i++) {
			if (i == 0 && !meals) {
				filterstring = "ID eq " + meals[i];
			}
			else {
				filterstring += " or ID eq " + meals[i]
			}
		}
		
		for (var i = 0; i < sides.length; i++) {
			if (i == 0 && !sides) {
				filterstring = "ID eq " + sides[i];
			}
			else {
				filterstring += " or ID eq " + sides[i]
			}
		}
		return Menus.callWebservice("Additives", "");
	}
	Init: function() {
		//this totally does not work at all, but you get the idea what I want to do
		Menus.getCantinas()
			   .when(Menus.getMeals(cantinas), Menus.getSides(cantinas))
			     .then(Menus.getAdditives(meals, sides)
			       .done(function(cantinas, meals, sides, additives){
				     Menus.cantinas = cantinas;
					 Menus.meals = meals;
					 Menus.sides = sides;
					 Menus.additives = additives;
					 
					 //... some html stuff to build the menus
				   });
	}
}
Menus.Init()

我希望我有道理?如何使用Promise和从上到下的级联参数,以及基本上如何使上述声明起作用,并为我提供包含多餐,多方食物和添加剂的多个菜单。

本杰明·格伦鲍姆(Benjamin Gruenbaum)

像评论说的$.when是一个免费功能。如果我们使用then能力链接,我们可以在这里获得非常简洁的语法。

Menus.getCantinas().then(function(cantinas){ // `then` is how we chain promises
    Menus.cantinas = cantinas;
    // if we need to aggregate more than one promise, we `$.when`
    return $.when(Menus.getMeals(cantinas), Menus.getSides(cantinas));
}).then(function(meals, sides){ // in jQuery `then` can take multiple arguments
    Menus.sides = sides; // we can fill closure arguments here
    Menus.meals = meals;
    return Menus.getAdditives(meals, sides); // again we chain
}).then(function(additives){
    Menus.additives = additives;
    return Menus; // we can also return non promises and chain on them if we want
}).done(function(){ // done terminates a chain generally.
     // edit HTML here
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mockito什么时候-然后返回错误

来自分类Dev

什么时候在Python中使用方法级联?

来自分类Dev

什么时候不接受符号链接?

来自分类Dev

Java是什么时候引入@interface的?

来自分类Dev

Kotlin中折叠和缩小之间的基本区别是什么?什么时候使用?

来自分类Dev

Powershell中@()和@ {}之间的区别是什么?什么时候可以相互使用?

来自分类Dev

Swift中Hashable和Equatable的用途是什么?什么时候使用?

来自分类Java

加载,链接和初始化-什么时候加载类?

来自分类Dev

什么时候在angularjs中使用链接函数和编译函数?

来自分类Java

在Java中,做“==”框或拆箱比较对象和常数值是什么时候?

来自分类Dev

只是什么时候不安全语音,#。和。#不安全?

来自分类Dev

什么时候使用MyISAM和InnoDB?

来自分类Java

什么时候去@RequestParam和@PathVariable

来自分类Dev

什么时候使用.val()和.innerHTML?

来自分类Dev

什么时候使用mapParitions和mapPartitionsWithIndex?

来自分类Dev

什么时候使用AbstractAnnotationConfigDispatcherServletInitializer和WebApplicationInitializer?

来自分类Dev

什么时候使用.jar和.exe?

来自分类Dev

count ++和++ count,什么时候使用?

来自分类Dev

什么时候在postgreSQL中使用=和:=?

来自分类Dev

什么时候使用[value]和/或[ngValue]?

来自分类Dev

什么时候应该使用<或<()或<<和>或>()?

来自分类Dev

“什么时候”在Kotlin中是什么意思?

来自分类Dev

-rdynamic`的功能是什么,什么时候需要?

来自分类Dev

什么时候进行输入验证的最佳实践是什么?

来自分类Dev

什么时候应该建立符号链接而不是别名?

来自分类Dev

什么时候创建硬链接有用?

来自分类Dev

EntityState.Deleted 和 Remove() 方法之间的真正区别是什么?什么时候使用它们?

来自分类Dev

访问令牌的到期日期是什么时候?

来自分类Dev

我的内核是什么时候更新和安装的

Related 相关文章

  1. 1

    Mockito什么时候-然后返回错误

  2. 2

    什么时候在Python中使用方法级联?

  3. 3

    什么时候不接受符号链接?

  4. 4

    Java是什么时候引入@interface的?

  5. 5

    Kotlin中折叠和缩小之间的基本区别是什么?什么时候使用?

  6. 6

    Powershell中@()和@ {}之间的区别是什么?什么时候可以相互使用?

  7. 7

    Swift中Hashable和Equatable的用途是什么?什么时候使用?

  8. 8

    加载,链接和初始化-什么时候加载类?

  9. 9

    什么时候在angularjs中使用链接函数和编译函数?

  10. 10

    在Java中,做“==”框或拆箱比较对象和常数值是什么时候?

  11. 11

    只是什么时候不安全语音,#。和。#不安全?

  12. 12

    什么时候使用MyISAM和InnoDB?

  13. 13

    什么时候去@RequestParam和@PathVariable

  14. 14

    什么时候使用.val()和.innerHTML?

  15. 15

    什么时候使用mapParitions和mapPartitionsWithIndex?

  16. 16

    什么时候使用AbstractAnnotationConfigDispatcherServletInitializer和WebApplicationInitializer?

  17. 17

    什么时候使用.jar和.exe?

  18. 18

    count ++和++ count,什么时候使用?

  19. 19

    什么时候在postgreSQL中使用=和:=?

  20. 20

    什么时候使用[value]和/或[ngValue]?

  21. 21

    什么时候应该使用<或<()或<<和>或>()?

  22. 22

    “什么时候”在Kotlin中是什么意思?

  23. 23

    -rdynamic`的功能是什么,什么时候需要?

  24. 24

    什么时候进行输入验证的最佳实践是什么?

  25. 25

    什么时候应该建立符号链接而不是别名?

  26. 26

    什么时候创建硬链接有用?

  27. 27

    EntityState.Deleted 和 Remove() 方法之间的真正区别是什么?什么时候使用它们?

  28. 28

    访问令牌的到期日期是什么时候?

  29. 29

    我的内核是什么时候更新和安装的

热门标签

归档