我有一个用例,如果有可能以某种方式返回.then()
中检索到的值,那将会很棒。
让我告诉你为什么,想要什么,想要什么。
几乎每个API调用都要发送到API_KEY
和DEVICE_ID
。现在出于用户体验的原因,这些值是本机存储中的一个名为user
的对象(稍后将是安全存储)。
这里的问题是,我的headers
将是第一行创建的空标题。这是有道理的,因为.then()
将是异步的。
getUserHeaders(): Headers {
let headers: Headers = new Headers();
let user = NativeStorage.getItem("user").then(
data => {
headers.append('API_KEY', data.json().apiKey);
headers.append('DEVICE_ID', data.json().deviceId);
},
error => {
console.log("error");
headers.append('API_KEY', 'TEST');
headers.append('DEVICE_ID', 'TEST');
}
);
return headers;
}
现在我要做的就是每次通话都有:f.e。
this.http.get('someUrl', { headers: this.getUserHeaders() } ).map(..);
我的问题是,如何从data
和error
块中返回标题,还是应该尝试完全不同的方法?
答案 0 :(得分:0)
那是不可能的。一旦异步,永远异步。你无能为力。
只需从headers
中返回.then(..)
并返回承诺
getUserHeaders(): Headers {
let headers: Headers = new Headers();
return = NativeStorage.getItem("user").then(
data => {
headers.append('API_KEY', data.json().apiKey);
headers.append('DEVICE_ID', data.json().deviceId);
return headers;
},
error => {
console.log("error");
headers.append('API_KEY', 'TEST');
headers.append('DEVICE_ID', 'TEST');
return headers;
}
);
}
然后调用者可以像
一样使用它this.getUserHeaders().then(headers => /* doSoemthingWithHeaders */)