【发布时间】:2016-10-14 02:41:18
【问题描述】:
我的范围界定有问题,我在这里不太了解。我有以下示例代码:
/**
* Created by David on 10/9/2016.
*/
var public = {};
//REQUIRES
var fs = require('fs');
var rl = require('readline');
//========================================
var configFile = './config';
public.configFile = configFile;
//========================================
public.readSettingsFile = function(conFile){
return new Promise(function(resolve,reject){
try {
console.log("Importing Settings");
//read configuration file line by line
var lineStream = rl.createInterface({
input: fs.createReadStream(conFile === undefined ? configFile : conFile)
});
lineStream.on('line', function (line) {
if(!line.startsWith('#')){
var splitLine = line.split('=');
switch(splitLine[0]){
case 'version':
public.version = splitLine[1];
break;
case 'basePath':
public.basePath = splitLine[1];
break;
}
}
resolve(public);
});
}catch(err){
reject(err);
}
});
}
//========================================
module.exports = public;
我希望,在.then 上,p 应该返回的承诺,在成功 readSettingsFile 之后,现在应该包含 public.version,但它返回以下内容:
{ configFile: './config', readSettingsFile: [Function] }
switch语句中的console.log正确返回:
0.1
【问题讨论】:
-
您甚至还没有调用
public.readSettingsFile函数。当你愿意时 - 你会发现你的 readline 代码是异步的。 -
你所做的很多事情都不是很清楚和完整。例如,您实际上在哪里调用 readSettingsFile?您的承诺也不会返回成功的结果。
-
抱歉,编辑是为了让它更有意义
-
@zerkms,我想知道我设置 Promise 的方式,它是否仍在异步运行,所以尽管尚未完成阅读,但它正在返回一个有效的 Promise?
-
new Promise(function(resolve,reject){ reject(err); });只是Promise.reject(err)。
标签: javascript node.js scope