函数" 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;
}
答案 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请求等)完成操作。
答案 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
});
}