是否可以阻止返回未來的函數調用?製作Future塊直到完成
我的印象是.then()
這樣做,但這並不是我在輸出中看到的。
print("1");
HttpRequest.getString(url).then((json) {
print("2");
});
print("3");
我所看到的在我的輸出是:
1
3
2
的getString
方法不具有async
,讓我來await
並then
在任何情況下異步執行。
static Future<String> getString(String url,
{bool withCredentials, void onProgress(ProgressEvent e)}) {
return request(url, withCredentials: withCredentials,
onProgress: onProgress).then((HttpRequest xhr) => xhr.responseText);
}
我如何阻止它沒有把無限的,而之前的步驟3等待第2步循環完成(而不是它會反正工作,由於飛鏢的單線程性質)?上面的HttpRequest
的加載config.json
文件決定一切的應用程序是如何工作的,如果在配置爲字段請求完成config.json
文件之前加載完成後,它會導致錯誤,所以我需要等到文件在我允許在類的字段上調用getter之前完成加載,或者getters需要等待config.json
文件的一次加載。
更新,這是我最終沒有使它工作岡特建議後,我用一個Completer
:
@Injectable()
class ConfigService {
Completer _api = new Completer();
Completer _version = new Completer();
ConfigService() {
String jsonURI =
"json/config-" + Uri.base.host.replaceAll("\.", "-") + ".json";
HttpRequest.getString(jsonURI).then((json) {
var config = JSON.decode(json);
this._api.complete(config["api"]);
this._version.complete(config["version"]);
});
}
Future<String> get api {
return this._api.future;
}
Future<String> get version {
return this._version.future;
}
}
而且在那裏我使用ConfigService
:
@override
ngAfterContentInit() async {
var api = await config.api;
var version = await config.version;
print(api);
print(version);
}
現在,我得到阻塞式的功能,而不會實際阻塞。
嗯,相當泡菜!在被加載的那個json文件中,有一個我需要加載到ConfigService中的URL。 NG2的加載速度非常快,當它開始向該URL發送RPC調用數據時,config.json文件仍然被加載,從而導致404錯誤。 –