javascript-doesn等待数据返回 - 值未定义

时间:2017-11-04 16:21:53

标签: javascript angularjs promise

函数" classTableData"在按钮单击时调用,我的allData未定义。它处理下一行代码而不等待结果,因此我的" allData"未定义。有人可以提供帮助吗?

function classTableData(){
     loadStudentPDFData().then(function (results) {
                  studentPDFData = results.pdfData;
                });
        var allData = studentPDFData;
        $log.log("AllData"+allData.length);

    }

function loadStudentPDFData() {
  var deferred = q.defer();
   var core5PDFData=angular.copy(core5InstructionPlanner);
       core5PDFData.loadPDFSection('all', function() {
     deferred.resolve({pdfData:core5PDFData.dataSource('all').data()});
      });
    return deferred.promise;
  }

2 个答案:

答案 0 :(得分:0)

<Button android:id="@+id/eenCentMin" android:layout_width="warp_content" android:layout_height="warp_content" android:layout_gravity="center_vertical" android:layout_marginRight="5dp" android:background="@drawable/button_geld_tellen" android:onClick="onButtonGeldTellenClick" android:text="+" android:textColor="@color/geldTellenTextColor" android:textSize="30sp" android:textStyle="bold" android:padding="5dp" //as need set /> 返回一个承诺。

已解决的承诺返回对象loadStudentPDFData

虽然您已将{pdfData:core5PDFData.dataSource('all').data()}置于解决回调中,但您还有另外两行。

studentPDFData = results.pdfData;

这会导致studentPDFData在分配给 var allData = studentPDFData; $log.log("AllData"+allData.length); 时未定义,从而导致allData的记录。 如果你在回调中推送这两行,它应该可以工作。

null

Javascript本质上是异步的,Promise是它的一个组成部分。 promise用于根据稍后可能出现的结果(例如数据库调用或http请求等)完成操作。

您可以阅读有关promises here和q库here的更多信息。

答案 1 :(得分:0)

.then()

中执行任务
loadStudentPDFData()
.then(function (results) {
  $log.log("AllData" + results.pdfData.length);
  return results.pdfData
});

如果.then()classTableData函数链接到return loadStudentPDFData() classTableData()

function classTableData() {
  return loadStudentPDFData()
         .then(function (results) {
           $log.log("AllData" + results.pdfData.length);
           return results.pdfData
         });
}