你去调用系统的函数,是直调。让系统调用你的函数,就是回调。
https://www.zhihu.com/question/19801131
所谓的回调函数就是所谓的委托
事件的原理就是委托
回调函数在什么场景有用?
我要在特定时候执行一个任务,至于是什么时候我自己都不知道。比如某一时间到了或者某一事件发生或者某一中断触发。
回调函数怎么起作用?
把我要执行的这个任务写成一个函数,将这个函数和某一时间或者事件或者中断建立关联。当这个关联完成的时候,这个函数华丽的从普通函数变身成为回调函数。
回调函数什么时候执行?
当该回调函数关心的那个时间或者事件或者中断触发的时候,回调函数将被执行。
一般是触发这个时间、事件或中断的程序主体(通常是个函数或者对象)观察到有一个关注这个东东的回调函数的时候,这个主体负责调用这个回调函数。
回调函数有什么好处?
最大的好处是你的程序变成异步了。也就是你不必再调用这个函数的时候一直等待这个时间的到达、事件的发生或中断的发生(万一一直不发生,你的程序会怎么样?)。再此期间你可以做做别的事情,或者四处逛逛。当回调函数被执行时,你的程序重新得到执行的机会,此时你可以继续做必要的事情了。
import DeviceInfo from 'react-native-device-info';
import * as Config from '../Common/Config';
var RNFS = require('react-native-fs');
const dirName = Config.APP_Course_New;
let index = Config.APP_Course_New.lastIndexOf('/');
if (index !== -1)
{
dirName = dirName.substring(index+1);
}
index = dirName.lastIndexOf(".");
dirName = dirName.substring(0,index);
function AppDatas(){
};
AppDatas.prototype.modeChoice = {
// 上课 1
// 备课 2
modeChoice : 1,
};
AppDatas.prototype.selectCourse = {
Course_Type_Id : 1,
Course_Type_Name : "",
Course_Id : 1,
Course_Name : "",
Class_Time : "",
Class_Name : "",
};
AppDatas.prototype.courseUpdate = {
newCourseDestNameTmp :RNFS.CachesDirectoryPath+"/"+DeviceInfo.getVersion()+'.'+Config.APP_CLIENT_RES_VERSION+"/"+"test.zip",
newCourseDestDirTmp :RNFS.CachesDirectoryPath+"/"+DeviceInfo.getVersion()+'.'+Config.APP_CLIENT_RES_VERSION,
newCourseDestDir :RNFS.CachesDirectoryPath+"/"+DeviceInfo.getVersion()+'.'+Config.APP_CLIENT_RES_VERSION+"/"+dirName,
updateCourseYes :true,
newCourseDestName :RNFS.MainBundlePath+"/lesson/test2.ly",
};
var instance = new AppDatas();
module.exports = instance;
if (result.status === 0 ) {
console.log('课件有更新 。。文件从 缓存打开');
AppDatas.courseUpdate.updateCourseYes = true;
AppDatas.courseUpdate.newCourseDestDir = AppDatas.courseUpdate.newCourseDestDir;
console.log('AppDatas.courseUpdate.newCourseDestDir 从缓存打开');
this.setState({courseUpdate :true});
}
else
{
console.log('课件 没有 更新 。。文件从 app 打开');
AppDatas.courseUpdate.updateCourseYes = false;
AppDatas.courseUpdate.newCourseDestDir = RNFS.MainBundlePath+"/lesson";
console.log('AppDatas.courseUpdate.newCourseDestDir 从app打开');
this.setState({courseUpdate :false});
}
'use strict';
import React, { Component } from 'react';
import {
NavigatorIOS,
Image,
Text,
TouchableHighlight,
StyleSheet,
View,
Alert,
ListView,
TouchableOpacity,
NativeModules,
InteractionManager,
} from 'react-native';
var LessonParserModule = NativeModules.RNLessonParserModule;
import {toastShort} from './ToastUtil';
import AppDatas from '../AppDatas/AppDatas';
var RNFS = require('react-native-fs');
class OpenCourse {
openCourse( filename, callback )
{
LessonParserModule.OpenLesson(filename, (ret)=>{
callback(ret);
});
}
}
var instance = new OpenCourse();
module.exports = instance;
console.log('打开的课件名字 需要 通过计算得出 ');
let courseLastName = "";
if (AppDatas.courseUpdate.updateCourseYes) {
courseLastName = "/test1.ly";
}
else
{
courseLastName = "/test2.ly";
}
AppDatas.courseUpdate.newCourseDestName = AppDatas.courseUpdate.newCourseDestDir+courseLastName;
function switchPage( ret )
{
if ( ret === 1 )
{
navigator.push({name:'CoursaDetailPage', params:{lesson:'test2'}, component:CoursaDetailPage});
}
else
{
toastShort("catalogpage open file fail");
}
}
OpenCourse.openCourse(AppDatas.courseUpdate.newCourseDestName, switchPage );