dart - 在Dart语言中将Future .then(_)与 “return”一起使用

标签 dart future

我有一个自定义元素,其中一个函数在返回元素之前从服务器调用SQL语句。问题是:执行SQL需要很长时间,因此该函数返回NULL元素,随后又完成了SQL。

初始代码为:

  Element launchElement(){
        getItems();
        return(innerDiv);
    }

但是由于这个问题,我尝试使用如下所示的Future来控制它

  Element launchElement(){
     Future fonixFuture() => new Future.value(true);
     fonixFuture()
            .then((_)=> getItems())
            .then((_)=> return(innerDiv));
 }

但是在Dart编辑器中出现了很多错误,如下所示:

Multiple markers at this line
- Expected to find 
 ';'
- Expected to find 
 ';'
- Expected to find 
 ';'
- Dead code
- Unexpected 
 token ')'
- Expected an 
 identifier
- Expected an 
 identifier
- Expected to find 
 ')'

get item函数是对服务器的简单调用,以从SQL获取输出:

 getItems(){  
    request = new HttpRequest();
    request.onReadyStateChange.listen(onData_getItems);

    request.open('POST', host+'/getItems');
    request.send(' ');  
  }

  onData_getItems(_){
    if (request.readyState == HttpRequest.DONE && request.status == 200) {   

     for(Map item in JSON.decode(request.responseText)){
         LineItem..children.add(new OptionElement(value: item['Code'], data: item['Name']));
    }         
} 
else if (request.readyState == HttpRequest.DONE &&
  request.status == 0) { 
     fonixFooter.classes..add('serverERROR');
     fonixFooter.innerHtml= "could not connect to server, contact your admin";  
}
else
  { 
     fonixFooter.classes..add('serverERROR');
     fonixFooter.innerHtml= "Failed to fetch data from server, contact your admin";  
  }

}

自定义元素本身是:

class purchaseLines extends HtmlElement {
    static final tag = 'purchase-lines';
    factory purchaseLines() => new Element.tag(tag);

    var innerDiv, LineItem;

    purchaseLines.created() : super.created() {      
        innerDiv = new cardFonix().launchElement();

        LineItem = new SelectElement()
              ..children.add(new OptionElement(value: '0', data:'Stock Code'));

         var LineQty = new InputElement()
                  ..type='number'
                   ..placeholder='Qty'  ;   

        LineQty.onKeyUp.listen((e){if(LineQty.checkValidity() == false)LineQty.value='0';});
        var Lineprice = new InputElement()
             ..type='number'
             ..placeholder='price';

          Lineprice.onKeyUp.listen((e){if(Lineprice.checkValidity() == false)Lineprice.value='0';});
          innerDiv.nodes..add(LineItem)..add(LineQty)..add(Lineprice); 
    }

有什么想法吗?

最佳答案

这不是合法的语法:

.then((_) => return(innerDiv));

在Dart中,return不是函数。我想也许您只是想要这样:

.then((_) => innerDiv);

您的函数调用应如下所示:

Future<Element> launchElement(){
  return new Future.value(true)
        .then((_) => getItems())
        .then((_) => innerDiv);
}

关于dart - 在Dart语言中将Future .then(_)与 “return”一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392140/

相关文章:

java - Future.get(timeout) 的底层线程行为

flutter - 有没有办法将 Dart 绑定(bind)到lua?

flutter - 无法从flutter中的其他类访问提供者类中的变量

java - 如何在 Java 中使用带有 WebClient 的 Vertx 路由器中的 future

java - gRPC:创建阻塞或 future stub

java - 当获取设置了超时的 Future 结果时,哪里抛出了异常?

scala - 使用返回 Future 的二元运算折叠序列

android - Flutter如何在圆圈中显示标记? flutter_map

firebase - 为什么 Future<String> 返回 "Instance of Future<String>"而不是我的 Stream 中的返回值

firebase - 我如何添加加载圆形图标,因为从Firestore提取数据需要时间?