我需要进行一次api调用,它会返回id的响应以及与之关联的值。如果找到或未找到id,则promise将解析并返回true或false。
我怎样才能做到这一点?使用承诺的新手。承诺似乎令人困惑
这是使用API的终点,UserService返回一个id和工资数组。我需要检查id是否存在且薪水是否与查询匹配,然后promise需要解析为true或false。
这是id' s和收入
的对象ITestResult
qualifiesforlowIncome 是一个返回true或false的布尔值。我正在使用angular,所以在这种情况下我应该执行$ q.defer并返回defer.promise吗?
有点不清楚
答案 0 :(得分:3)
当然,您需要做的就是添加then
个案例,确定是否有任何对象与查询匹配,然后从中返回true
或false
。该值将被带入下一个then
案例。
在此示例中,我使用some
方法查看数组中的任何对象是否与条件匹配。
Promise.resolve([
{
id: 1
},
{
id: 2
},
{
id: 3
}
])
.then(results =>
results.some(r => r.id === 2)
)
.then(foundResult => console.log(foundResult));

或在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);
});

即使你返回一个后来解析的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));

答案 1 :(得分:0)
你如何打电话给api?我们假设你使用fetch。
const UserService = {
getUsersWithIncome(income) {
return fetch("your.api/users?income="+income).then(resp => resp.json());
}
hasUserValue(id, income) {
return UserService.getUsersWithIncome(income).then(users => {
return users.some(u => u.id == id);
});
}
};
但顺便说一下,这里的逻辑似乎是相反的。那么你有一个端点列出低收入用户,然后寻找一个特定的ID?为什么你没有休息终点直接告诉具有给定id的用户是否收入低?
答案 2 :(得分:0)
编辑:不要这样做!请参阅下面的Bergi评论。
您希望使用$q
从hasUserValue()
返回延迟承诺,在该方法中发出API请求,然后在API请求完成后解析承诺,并且您有机会紧缩数字:
hasUserValue(id, income) {
var dfd = $q.defer();
SomeService.getSalaries().then(function(resp) {
// Do some logic here with the response
var qualifiesforlowIncome = someFuncThatDeterminesEligibility(resp);
// This is the value that will be returned for `qualifiesforlowIncome` in your then() callback
dfd.resolve(qualifiesforlowIncome);
});
return dfd.promise;
}
这基本上是伪代码,重要的一点是使用AngularJS的$q
创建延迟的承诺,然后将函数的承诺作为dfd.promise
返回。 dfd
对象将具有resolve()
和reject()
方法,可用于在您调用时注册的then()
或catch()
回调中传回自定义值方法