@@ -57,7 +57,6 @@ function Module (id, parent) {
57
57
58
58
this . filename = null ;
59
59
this . loaded = false ;
60
- this . loadPromise = null ;
61
60
this . exited = false ;
62
61
this . children = [ ] ;
63
62
} ;
@@ -929,10 +928,8 @@ function loadModuleSync (request, parent) {
929
928
}
930
929
931
930
932
- function loadModule ( request , parent ) {
931
+ function loadModule ( request , parent , callback ) {
933
932
var
934
- // The promise returned from require.async()
935
- loadPromise = new events . Promise ( ) ,
936
933
resolvedModule = resolveModulePath ( request , parent ) ,
937
934
id = resolvedModule [ 0 ] ,
938
935
paths = resolvedModule [ 1 ] ;
@@ -942,23 +939,20 @@ function loadModule (request, parent) {
942
939
var cachedModule = internalModuleCache [ id ] || parent . moduleCache [ id ] ;
943
940
if ( cachedModule ) {
944
941
debug ( "found " + JSON . stringify ( id ) + " in cache" ) ;
945
- process . nextTick ( function ( ) {
946
- loadPromise . emitSuccess ( cachedModule . exports ) ;
947
- } ) ;
942
+ if ( callback ) callback ( null , cachedModule . exports ) ;
948
943
} else {
949
944
debug ( "looking for " + JSON . stringify ( id ) + " in " + JSON . stringify ( paths ) ) ;
950
945
// Not in cache
951
946
findModulePath ( request , paths , function ( filename ) {
952
947
if ( ! filename ) {
953
- loadPromise . emitError ( new Error ( "Cannot find module '" + request + "'" ) ) ;
948
+ var err = new Error ( "Cannot find module '" + request + "'" ) ;
949
+ if ( callback ) callback ( err ) ;
954
950
} else {
955
951
var module = new Module ( id , parent ) ;
956
- module . load ( filename , loadPromise ) ;
952
+ module . load ( filename , callback ) ;
957
953
}
958
954
} ) ;
959
955
}
960
-
961
- return loadPromise ;
962
956
} ;
963
957
964
958
@@ -976,19 +970,17 @@ Module.prototype.loadSync = function (filename) {
976
970
} ;
977
971
978
972
979
- Module . prototype . load = function ( filename , loadPromise ) {
973
+ Module . prototype . load = function ( filename , callback ) {
980
974
debug ( "load " + JSON . stringify ( filename ) + " for module " + JSON . stringify ( this . id ) ) ;
981
975
982
976
process . assert ( ! this . loaded ) ;
983
- process . assert ( ! this . loadPromise ) ;
984
977
985
- this . loadPromise = loadPromise ;
986
978
this . filename = filename ;
987
979
988
980
if ( filename . match ( / \. n o d e $ / ) ) {
989
- this . _loadObject ( filename , loadPromise ) ;
981
+ this . _loadObject ( filename , callback ) ;
990
982
} else {
991
- this . _loadScript ( filename , loadPromise ) ;
983
+ this . _loadScript ( filename , callback ) ;
992
984
}
993
985
} ;
994
986
@@ -999,41 +991,40 @@ Module.prototype._loadObjectSync = function (filename) {
999
991
} ;
1000
992
1001
993
1002
- Module . prototype . _loadObject = function ( filename , loadPromise ) {
994
+ Module . prototype . _loadObject = function ( filename , callback ) {
1003
995
var self = this ;
1004
996
// XXX Not yet supporting loading from HTTP. would need to download the
1005
997
// file, store it to tmp then run dlopen on it.
1006
- process . nextTick ( function ( ) {
1007
- self . loaded = true ;
1008
- process . dlopen ( filename , self . exports ) ; // FIXME synchronus
1009
- loadPromise . emitSuccess ( self . exports ) ;
1010
- } ) ;
998
+ self . loaded = true ;
999
+ process . dlopen ( filename , self . exports ) ; // FIXME synchronus
1000
+ if ( callback ) callback ( null , self . exports ) ;
1011
1001
} ;
1012
1002
1013
1003
1014
- function cat ( id , loadPromise ) {
1015
- var promise ;
1016
-
1004
+ function cat ( id , callback ) {
1017
1005
if ( id . match ( / ^ h t t p : \/ \/ / ) ) {
1018
- promise = new events . Promise ( ) ;
1019
- loadModule ( 'http' , process . mainModule )
1020
- . addCallback ( function ( http ) {
1006
+ loadModule ( 'http' , process . mainModule , function ( err , http ) {
1007
+ if ( err ) {
1008
+ if ( callback ) callback ( err ) ;
1009
+ } else {
1021
1010
http . cat ( id )
1022
1011
. addCallback ( function ( content ) {
1023
- promise . emitSuccess ( content ) ;
1012
+ if ( callback ) callback ( null , content ) ;
1024
1013
} )
1025
- . addErrback ( function ( ) {
1026
- promise . emitError . apply ( null , arguments ) ;
1014
+ . addErrback ( function ( err ) {
1015
+ if ( callback ) callback ( err ) ;
1027
1016
} ) ;
1017
+ }
1018
+ } ) ;
1019
+ } else {
1020
+ fs . readFile ( id )
1021
+ . addCallback ( function ( content ) {
1022
+ if ( callback ) callback ( null , content ) ;
1028
1023
} )
1029
- . addErrback ( function ( ) {
1030
- loadPromise . emitError ( new Error ( "could not load core module \"http\"" ) ) ;
1024
+ . addErrback ( function ( err ) {
1025
+ if ( callback ) callback ( err ) ;
1031
1026
} ) ;
1032
- } else {
1033
- promise = fs . readFile ( id ) ;
1034
1027
}
1035
-
1036
- return promise ;
1037
1028
}
1038
1029
1039
1030
@@ -1042,8 +1033,8 @@ Module.prototype._loadContent = function (content, filename) {
1042
1033
// remove shebang
1043
1034
content = content . replace ( / ^ \# \! .* / , '' ) ;
1044
1035
1045
- function requireAsync ( url ) {
1046
- return loadModule ( url , self ) ; // new child
1036
+ function requireAsync ( url , cb ) {
1037
+ loadModule ( url , self , cb ) ;
1047
1038
}
1048
1039
1049
1040
function require ( path ) {
@@ -1081,24 +1072,23 @@ Module.prototype._loadScriptSync = function (filename) {
1081
1072
} ;
1082
1073
1083
1074
1084
- Module . prototype . _loadScript = function ( filename , loadPromise ) {
1075
+ Module . prototype . _loadScript = function ( filename , callback ) {
1085
1076
var self = this ;
1086
- var catPromise = cat ( filename , loadPromise ) ;
1087
-
1088
- catPromise . addErrback ( function ( ) {
1089
- loadPromise . emitError ( new Error ( "Cannot read " + filename ) ) ;
1090
- } ) ;
1091
-
1092
- catPromise . addCallback ( function ( content ) {
1093
- var e = self . _loadContent ( content , filename ) ;
1094
- if ( e ) {
1095
- loadPromise . emitError ( e ) ;
1096
- return ;
1077
+ cat ( filename , function ( err , content ) {
1078
+ if ( err ) {
1079
+ if ( callback ) callback ( err ) ;
1080
+ } else {
1081
+ var e = self . _loadContent ( content , filename ) ;
1082
+ if ( e ) {
1083
+ if ( callback ) callback ( e ) ;
1084
+ } else {
1085
+ self . _waitChildrenLoad ( function ( ) {
1086
+ self . loaded = true ;
1087
+ if ( self . onload ) self . onload ( ) ;
1088
+ if ( callback ) callback ( null , self . exports ) ;
1089
+ } ) ;
1090
+ }
1097
1091
}
1098
- self . _waitChildrenLoad ( function ( ) {
1099
- self . loaded = true ;
1100
- loadPromise . emitSuccess ( self . exports ) ;
1101
- } ) ;
1102
1092
} ) ;
1103
1093
} ;
1104
1094
@@ -1111,10 +1101,11 @@ Module.prototype._waitChildrenLoad = function (callback) {
1111
1101
if ( child . loaded ) {
1112
1102
nloaded ++ ;
1113
1103
} else {
1114
- child . loadPromise . addCallback ( function ( ) {
1104
+ child . onload = function ( ) {
1105
+ child . onload = null ;
1115
1106
nloaded ++ ;
1116
1107
if ( children . length == nloaded && callback ) callback ( ) ;
1117
- } ) ;
1108
+ } ;
1118
1109
}
1119
1110
}
1120
1111
if ( children . length == nloaded && callback ) callback ( ) ;
@@ -1139,8 +1130,7 @@ if (process.argv[1].charAt(0) != "/" && !(/^http:\/\//).exec(process.argv[1])) {
1139
1130
1140
1131
// Load the main module--the command line argument.
1141
1132
process . mainModule = new Module ( "." ) ;
1142
- var loadPromise = new events . Promise ( ) ;
1143
- process . mainModule . load ( process . argv [ 1 ] , loadPromise ) ;
1133
+ process . mainModule . load ( process . argv [ 1 ] ) ;
1144
1134
1145
1135
// All our arguments are loaded. We've evaluated all of the scripts. We
1146
1136
// might even have created TCP servers. Now we enter the main eventloop. If
0 commit comments