2014-04-25 8 views
1

В этом проблема. Когда я запустил этот код:Подождите, пока запрос выполняется

String responseText = null; 

HttpRequest.getString(url).then((resp) { 
    responseText = resp; 
    print(responseText); 
    }); 
print(responseText); 

В консоли:

{"meta":{"code":200},"data":{"username":"kevin","bio":"CEO \u0026 Co-founder of Instagram","website":"","profile_picture":"http:\/\/images.ak.instagram.com\/profiles\/profile_3_75sq_1325536697.jpg","full_name":"Kevin Systrom","counts":{"media":1349,"followed_by":1110365,"follows":555},"id":"3"}} 
null 

Он работает в асинхронном режиме. Есть ли способ JAVA с синхронизированным методом? Это будет ждать, пока запрос будет выполнен? я нашел только один хитрый способ сделать это и ее смешно - ждать в течение трех секунд:

handleTimeout() { 
    print(responseText); 
} 
const TIMEOUT = const Duration(seconds: 3); 
new Timer(TIMEOUT, handleTimeout); 

И, конечно, он работает с ошибками. Итак, любые предложения?

MattB способ работы хорошо:

var req = new HttpRequest(); 
    req.onLoad.listen((e) { 
    responseText = req.responseText; 
    print(responseText); 
    }); 
    req.open('GET', url, async: false); 
    req.send(); 

ответ

3

Во-первых, я предполагаю, что вы используете это в качестве клиентского сценария, а не на стороне сервера. Использование HttpRequest.getString будет строго возвращать будущее (метод async).

Если вам абсолютно необходимо иметь синхронный запрос, вы можете создать новый объект HttpRequest и вызвать метод open передавая именованный параметр: async: false

var req = new HttpRequest(); 
req.onLoad.listen((e) => print(req.responseText)); 
req.open('GET', url, async: false); 
req.send(); 

Однако настоятельно рекомендуются использовать асинхронные методы доступа сетевые ресурсы в качестве синхронного вызова, подобного выше, заставят сценарий блокироваться и потенциально могут выглядеть так, как если бы ваша страница/сценарий перестала отвечать на плохие сетевые подключения.

+0

Да, на стороне клиента. По-прежнему печатать нуль – raiym

+0

Ваш код в соответствии с документацией должен работать, но я не знаю, почему он null – raiym

+0

https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-dom-html.HttpRequest#id_open , async – raiym

Смежные вопросы