2016-05-27 6 views
0

Ich möchte eine synchrone POST-Anfrage von der Client-Seite senden. Gemäß der Dokumentation können wir die 'async' benannten Parameter verwenden:Dart: Synchron Post-Anfrage

https://www.dartlang.org/articles/json-web-service/#saving-objects-on-the-server

var url = "http://127.0.0.1:8080/programming-languages"; 
request.open("POST", url, async: false); 

Aber das obige Beispiel führt den folgenden Syntaxfehler:

Die Schlüsselwörter 'async', 'erwarten' und "yield" darf nicht als Bezeichner in einer asynchronen oder Generatorfunktion verwendet werden.

Wie kann ich eine synchrone POST-Anfrage senden?

UPDATE (27. Mai 20.23)

fand ich eine Abhilfe dieses Problem zu lösen:

Future<String> deleteItem(String id) async { 
    final req = new HttpRequest() 
     ..open('POST', 'server/controller.php') 
     ..send({'action': 'delete', 'id': id}); 
    // wait until the request have been completed 
    await req.onLoadEnd.first; 
    // oh yes 
    return req.responseText; 
} 

Aber ich habe nicht die obige Lösung gefällt, weil es nicht scheint elegant genug.

Antwort

0

Die Lösung ist postFormData() statt send() zu verwenden. Zum Beispiel:

final req = await HttpRequest 
    .postFormData(url, {'action': 'delete', 'id': id}); 
return req.responseText; 
0

Dies ist ein bekanntes Problem mit diesem benannten Parameter https://github.com/dart-lang/sdk/issues/24637

+0

Das war ein Problem, das von Perl gelöst vor 25 Jahren, indem sigils auf allen Daten, erlaubt Rückwärtskompatibilität, indem es gleichzeitig '$ print' und' print' erlaubt, so dass neue Schlüsselwörter niemals mit alten Variablennamen in Konflikt geraten würden. Sigils waren aus einem bestimmten Grund da, Leute. –

+0

Perl hat auch ein paar neue Probleme eingeführt ;-) –

0
Future<String> deleteItem(String id) async { 
final req = new HttpRequest() 
    ..open('POST', 'server/controller.php') 
    ..send({'action': 'delete', 'id': id}); 
// wait until the request have been completed 
await req.onLoadEnd.first; 
// oh yes 
return req.responseText; 

}

dieses ist der Punkt, wo man manchmal brauchen „PUT“ oder „LÖSCHEN“

+0

'async' und' await' machen nichts synchron. Es ist einfach praktischer Syntax, um asynchrone Ausführung zu bewältigen. –