Promise让程序异步运行并节省时间,因为它同时从两个URL检索信息。
由于promises是异步运行的,对于$ q.all(promises)函数,resultList [0]总是有来自1.json的信息,而resultList [1]是否有来自2.json的信息? promises.push()可能没有来自1.json的数据吗?由于promise以异步方式运行,因此它可能只有2.json之前的数据,而不是1.json。
在其他服务器上运行页面(使用Promises)后,它会出错" Origin' www.dns' Access-Control-Allow-Origin不允许使用。"和" XMLHttpRequest无法加载' a.json'由于访问控制检查",对于Jquery GET方法可以使用JSONP来解决错误。但有没有办法可以在承诺中解决?
public class Program
{
public static void Main()
{
// the error is here
Child1.SortList(new List<Child1>() {});
}
}
public class Parent
{
public string Code { get; set; }
public Nullable<decimal> Order { get; set; }
public DateTime DateBegin { get; set; }
public Nullable<DateTime> DateEnd { get; set; }
public static List<Parent> SortList(List<Parent> list)
{
return list
.Where(x =>
DateTime.Compare(x.DateBegin, DateTime.Today) <= 0 &&
(
x.DateEnd == null ||
DateTime.Compare((DateTime)x.DateEnd, DateTime.Today) > 0))
.OrderBy(x => x.Order)
.ToList();
}
}
public class Child1 : Parent
{
public string Description { get; set; }
}
答案 0 :(得分:3)
简答:是。
来自documentation of $q.all
(强调我的):
返回将使用数组/散列解析的单个promise 值,对应于同一索引/键的promise的每个值 在promises数组/哈希中。如果任何一个promises用a解决 拒绝,由此产生的承诺将被拒绝 拒绝价值。
简而言之,$q.all
的结果将维持原始列表的顺序,而不管每个承诺单独解决的顺序。