同步Json vs Asychonrous Json回归

时间:2016-12-09 09:04:59

标签: jquery json ajax angular

现在,我有两个返回JSON数据的函数。

searchAjax(url: any): any
{
    let new_data: any;
    return $.ajax({
        url: url,
        type: 'post',
        dataType: "json", 
        async: false

    }).responseText;
}

search(): Promise<any> 
{
    return this.http.get('app/php/search.php')
        .toPromise()
        .then(response => {
            //console.log("search");
            console.log(response.json());
            response.json();
            })
        .catch(this.handleError);
}

现在searchAjax正确地返回了json数据,但它是同步的,而search只返回null,即使console.log(respon.json())实际打印了正确的json对象。

我只是想知道是否有办法异步获取JSON数据,或者同步获取数据是否足够好。

1 个答案:

答案 0 :(得分:1)

承诺处理程序的结果是您最终返回的结果。你的代码没有返回任何内容。

search(): Promise<any> 
{
    return this.http.get('app/php/search.php')
        .toPromise()
        .then(response => {
            return response.json();
        //  ^^^^^^
        })
        .catch(this.handleError);
}

或者,简而言之(此处return是隐式的,但您必须记住它在那里):

search(): Promise<any> 
{
    return this.http.get('app/php/search.php')
        .toPromise()
        .then(response => response.json())
        .catch(this.handleError);
}