Angular 2 - 返回`then` - 异步

时间:2016-11-15 14:10:28

标签: angular ionic2

我有一个用例,如果有可能以某种方式返回.then()中检索到的值,那将会很棒。

让我告诉你为什么,想要什么,想要什么。

几乎每个API调用都要发送到API_KEYDEVICE_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(..);

我的问题是,如何从dataerror块中返回标题,还是应该尝试完全不同的方法?

1 个答案:

答案 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 */)