$ Q。所有承诺(访问控制允许原点)

时间:2018-05-10 17:46:40

标签: javascript asynchronous promise cors allow-same-origin

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; }
}

1 个答案:

答案 0 :(得分:3)

简答:

来自documentation of $q.all(强调我的):

  

返回将使用数组/散列解析的单个promise   值,对应于同一索引/键的promise的每个值   在promises数组/哈希中。如果任何一个promises用a解决   拒绝,由此产生的承诺将被拒绝   拒绝价值。

简而言之,$q.all的结果将维持原始列表的顺序,而不管每个承诺单独解决的顺序。