"Can't wait without a fiber"查询数据库时出错?
"Can't wait without a fiber" error when querying db?
我有以下读取 CSV 文件然后从数据库中提取文档的代码:
fs.readFile process.env.PWD + '/data/errorports.csv', 'utf8', (err, data) ->
if err
console.log "Error reading csv", err
return
rows = data.split('\n')
for row in rows
columns = row.split(',')
airportCode = columns[0]
airport = Airports.findOne({_id: airportCode})
console.log 'airport:', airport
但是当我调用 Airports.findOne({_id: airportCode})
时它抛出错误:
/Users/abemiessler/.meteor/packages/meteor-tool/.1.3.4.19lp8gr++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:159
throw new Error('Can\'t wait without a fiber');
^
Error: Can't wait without a fiber
谁能看出我为什么会收到此错误?关于如何绕过它有什么建议吗?
您可能需要使用 Meteor.wrapAsync()
来执行此操作(使您的异步函数 运行 在 Fider 中...这将允许您在其中执行流星代码)。这是一个例子。
var syncReadFile = Meteor.wrapAsync(fs.readFile);
syncReadFile(process.env.PWD + '/data/errorports.csv', 'utf8', function(err, data) {
if (err) {
console.log "Error reading csv", err;
return;
}
rows = data.split('\n');
for (row in rows) {
columns = row.split(',');
airportCode = columns[0];
airport = Airports.findOne({_id: airportCode});
console.log 'airport:', airport;
}
});
或者...您可以尝试将回调包装到
Meteor.bindEnvironment()
会像
fs.readFile process.env.PWD + '/data/errorports.csv', 'utf8',
Meteor.bindEnvironment(function(err, data) {
[..your code..]
});
我有以下读取 CSV 文件然后从数据库中提取文档的代码:
fs.readFile process.env.PWD + '/data/errorports.csv', 'utf8', (err, data) ->
if err
console.log "Error reading csv", err
return
rows = data.split('\n')
for row in rows
columns = row.split(',')
airportCode = columns[0]
airport = Airports.findOne({_id: airportCode})
console.log 'airport:', airport
但是当我调用 Airports.findOne({_id: airportCode})
时它抛出错误:
/Users/abemiessler/.meteor/packages/meteor-tool/.1.3.4.19lp8gr++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:159
throw new Error('Can\'t wait without a fiber');
^
Error: Can't wait without a fiber
谁能看出我为什么会收到此错误?关于如何绕过它有什么建议吗?
您可能需要使用 Meteor.wrapAsync()
来执行此操作(使您的异步函数 运行 在 Fider 中...这将允许您在其中执行流星代码)。这是一个例子。
var syncReadFile = Meteor.wrapAsync(fs.readFile);
syncReadFile(process.env.PWD + '/data/errorports.csv', 'utf8', function(err, data) {
if (err) {
console.log "Error reading csv", err;
return;
}
rows = data.split('\n');
for (row in rows) {
columns = row.split(',');
airportCode = columns[0];
airport = Airports.findOne({_id: airportCode});
console.log 'airport:', airport;
}
});
或者...您可以尝试将回调包装到
Meteor.bindEnvironment()
会像
fs.readFile process.env.PWD + '/data/errorports.csv', 'utf8',
Meteor.bindEnvironment(function(err, data) {
[..your code..]
});