2017-08-30 94 views
1

我學習的前端與角鏢一般開發一個個人項目(我剛剛得知後端開發和Django)。我得到與HTTP易混淆教程,因爲從我作爲一個Web開發人員的角度初學者它試圖在只爲一個目的有關的不同的文件或地方,都同時做很多事情(可能是有效的,以這種方式代碼,但我覺得很難從學習它。)我爲該項目創建了一個API,並且我想知道如何從那裏創建一個簡單的HTTP請求。試圖做一個簡單的HTTP在角鏢get請求

這是我想要顯示的JSON對象:

"kanji": "老", 
"onyomi": "ロウ", 
"kunyomi": "お.いる、ふ.ける", 
"nanori": "えび, おい, び", 
"rtk_keyword": "old man", 
"english": "old man, old age, grow old", 
"jlpt": 3, 
"jouyou_grade": "4", 
"frequency": 803, 
"radicals": [ 
    2555, 
    2613 
], 
"pk": 1267 

這是我在讓顯示數據失敗的嘗試:

import "dart:async"; 
import 'dart:convert'; 

import 'package:angular2/angular2.dart'; 
import 'package:http/http.dart' as http; 
import 'package:http/http.dart'; 


@Component (
    selector: "test", 
    template: """ 
    <button (click)="change_info()">{{info}}</button> 
    """, 
) 
class Test { 
    String info = "default info"; 
    String _url = 'localhost:8000/kanji_detail/老'; 

    String get_and_decode(String url) { 
    String data_to_return; 
    http.get(url).then((response) => data_to_return = JSON.decode(response.body)); 
    return data_to_return; 
    } 

    String get_and_decode_long(String url) { 
    Response request_response; 
    Future request_future; 
    String data_to_return; 
    request_future = get(url); 
    request_future.then((response) => request_response = response); 
    data_to_return = JSON.decode(request_response.body); 
    return data_to_return; 
    } 

    change_info() { 
    info = get_and_decode_long(_url); 
    } 

} 

的get_and_decode_long是我的理解是在這個過程中涉及到未來和迴應,這並不是很明顯。

回答

4
Future<String> get_and_decode(String url) async { 
    var response = await http.get(url); 
    return JSON.decode(response.body)); 
} 

沒有辦法從異步恢復到同步執行。 async/await使得它很容易與異步代碼雖然woek。

在您的例子return data_to_return;響應到達之前執行。

+0

嗨,見感謝您的回覆。我更懂得如何在GET請求使用一個未來,我用異步/在等待着,我發現了一種誤導,我必須聲明函數的未來,但我沒有回到它使用它。我只能在將本地API更改爲公共API後使用它,並使用BrowserClient而不是常規的http方法和客戶端。 –

+0

很高興聽到你能使它工作。 'async'總是需要一個'Future'的返回類型,使主叫方可以「等待」呼叫完成,不管結果是否返回或消耗。一個'async'方法在其同步代碼執行後立即返回。返回的「未來」在其等待的**異步**代碼完成後完成。 –