离子2服务功能在返回前等待localstorage

时间:2017-07-02 03:21:47

标签: angular typescript ionic-framework ionic2

我从上周开始学习Ionic 2,现在我在我的服务中创建了一个函数,以便返回我的API URL,它将检查localstorage是否存储任何令牌。如果是,那么它会自动将令牌附加到URL,下面是函数的代码:

import numpy as np
def fun(x, y):
    return np.vstack((3.769911184e12*np.exp(-19846/y[1])*(1-y[0]), 0.2056315191*(y[2]-y[1])+6.511664773e14*np.exp(-19846/y[1])*(1-y[0]), 1.696460033*(y[2]-y[1])))
def bc(ya, yb):
    return np.array([ya[0], ya[1]-673, yb[2]-200])
x = np.linspace(0, 1, 5)
#y = np.ones((3, x.size))
y = np.array([[1, 1, 1, 1, 1], [670, 670, 670, 670, 670], [670, 670, 670, 670, 670] ])
from scipy.integrate import solve_bvp
sol = solve_bvp(fun, bc, x, y)

然后我使用以下方法在我的控制器中调用此函数:

getApiUrl(method: string){
    this.storage.get('user_data').then((val) => {
        let extUrl: string = null;
        if(val){
            extUrl = '?token='+val.token;
           }
        return "http://localhost/api/"+method+extUrl;
    }).catch(err=>{
        console.log('Your data don\'t exist and returns error in catch: ' + JSON.stringify(err));
        return ''; 
    });
}

发生以下错误:

this.http.post(this.service.getApiUrl("method_name"), data, options)

我曾尝试更改我的代码以使用Promise,但它似乎也不起作用,如何使我的函数等待API URL?

1 个答案:

答案 0 :(得分:1)

您没有从getApiUrl方法返回任何内容。在post承诺解决后,您必须退回承诺并致电getApiUrl方法:

getApiUrl(method: string){
    return this.storage.get('user_data').then((val) => {
        let extUrl: string = null;
        if(val){
            extUrl = '?token='+val.token;
           }
        return "http://localhost/api/"+method+extUrl;
    }).catch(err=>{
        console.log('Your data don\'t exist and returns error in catch: ' + JSON.stringify(err));
        return ''; 
    });
}

this.service.getApiUrl("method_name")
  .then((url) => {
    this.http.post(url, data, options);
  });