返回一个承诺,如果找到一个值,则将其解析为布尔值true或false

loo*_*nes 5 javascript promise angularjs angular-promise

我需要进行api调用,以返回ID和与其关联的值的响应。然后,promise解析并返回true或false(如果找到或未找到查询的id)。

我怎样才能做到这一点?使用诺言的新手。正如诺言似乎令人困惑

这是使用API​​的终点,UserService返回ID和薪水的数组。我需要检查ID是否存在以及薪水是否与查询匹配,然后Promise需要解析为true或false。

这是身份证和收入的对象

      [{
            "id": 1,
            "name": "Primary",
            "sal": [{
                    "id": "1",
                    "sal": "10"
                }, {
                    "id": "2",
                    "sal": "20"
                }]
            },{
            "id": 2,
            "name": "Secondary",
            "sal": [{
                    "id": "1",
                    "sal": "100"
                }, {
                    "id": "2",
                    "sal": "200"
                }
            ]
        }];


  UserService.hasUserValue(id, income).then(function(qualifiesforlowIncome){
     var isLowIncome = qualifiesforlowIncome
   }
Run Code Online (Sandbox Code Playgroud)

qualifyforlowIncome是返回true或false的布尔值。我正在使用角度,因此在这种情况下我应该执行$ q.defer并返回defer.promise吗?

对此还不太清楚

Mik*_*uck 5

当然,您需要做的就是添加一个then案例,确定是否有任何对象与查询匹配,然后返回truefalse从中返回。该值将被带入下一个then案例。

在此示例中,我使用该some方法来查看数组中的任何对象是否符合条件。

Promise.resolve([
    {
      id: 1
    },
    {
      id: 2
    },
    {
      id: 3
    }
  ])
  .then(results => 
    results.some(r => r.id === 2)
  )
  .then(foundResult => console.log(foundResult));
Run Code Online (Sandbox Code Playgroud)

或者用 ES5 重写:

Promise.resolve([
    {
      id: 1
    },
    {
      id: 2
    },
    {
      id: 3
    }
  ])
  .then(function(results) { 
    return results.some(r => r.id === 2);
  })
  .then(function(foundResult) {
    console.log(foundResult);
  });
Run Code Online (Sandbox Code Playgroud)

即使您返回一个稍后解析的 Promise,其工作原理也完全相同。

Promise.resolve([
    {
      id: 1
    },
    {
      id: 2
    },
    {
      id: 3
    }
  ])
  .then(results => 
    // Return a promise, delay sending back the result
    new Promise((resolve, reject) => {
      setTimeout(() =>
        resolve(results.some(r => r.id === 2)),
        500
      );
    })
  )
  .then(foundResult => console.log(foundResult));
Run Code Online (Sandbox Code Playgroud)