2016-10-21 3 views
0

Я пытаюсь позвонить _.each функция в метеорном сервере метод. Как вы знаете, каждый метод имеет функцию, которая будет выполняться для каждого элемента в списке Моя проблема, что я не могу использовать bindenviroment функцию в правильном пути я имею ошибку ниже Ошибка: Метеор код должен всегда работать внутри волокна. Попробуйте обменивать обратные вызовы, которые вы передаете библиотекам не-Метеор с помощью Meteor.bindEnvironment.метеор и lodash каждый

Вот мой код

'fillSampleData': function() { 
var fs = require('fs'); 
var base = process.env.PWD 
projectsCollction.remove({}); 
changeSetsCollction.remove({}); 
var readFileAndInsert = function() { 
    fs.readFile(base + '/server/json/projects.json', 'utf8', 
    function(err, data) { 
     if (err) throw err; 
     console.log(data); 
     var json = JSON.parse(data); 
     //loop th 
     _.each(json, Meteor.bindEnvironment((eer, projctItem) => { 
     var project_Id = projectsCollction.insert(
      projctItem) 
     console.log(`projict ${project_Id}`); 

     })); 
    } 
    //---------------------------- 
); 
} 
    readFileAndInsert() 
} 

============= Редактировать =======

Я изменил код, кроме Такой же результат

'fillSampleData': function() { 

var fs = require('fs'); 
var base = process.env.PWD 
projectsCollction.remove({}); 
changeSetsCollction.remove({}); 
var myFunction = function(passedItem) { 
    Meteor.bindEnvironment((eer, passedItem) => { 
    var project_Id = projectsCollction.insert(
     passedItem) 
    console.log(`project ${project_Id}`); 
    }) 
} 
var readFileandInsert = function() { 
    fs.readFile(base + '/server/json/projects.json', 'utf8', 
    function(err, 
     data) { 
     if (err) throw err; 
     console.log(data); 
     var json = JSON.parse(data); 
     _.each(json, (item) => { 
     myFunction(item); 
     }); 
    } 
    //---------------------------- 
); 
} 
readFileandInsert(); 
} 

стек ошибка

W20161022-07:22:26.840(3)? (STDERR) /home/mohammed/poly/synthesis- demo/.meteor/local/build/programs/server/packages/meteor.js:1060 
W20161022-07:22:26.844(3)? (STDERR)  throw new Error("Meteor code must always run within a Fiber. " + 
W20161022-07:22:26.848(3)? (STDERR) ^
W20161022-07:22:26.853(3)? (STDERR) 
W20161022-07:22:26.855(3)? (STDERR) Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment. 
W20161022-07:22:26.860(3)? (STDERR)  at Object.Meteor._nodeCodeMustBeInFiber (packages/meteor/dynamics_nodejs.js:9:1) 
W20161022-07:22:26.863(3)? (STDERR)  at Object.Meteor.bindEnvironment (packages/meteor/dynamics_nodejs.js:85:1) 
W20161022-07:22:26.865(3)? (STDERR)  at myFunction (server/main.js:42:14) 
W20161022-07:22:26.867(3)? (STDERR)  at server/main.js:56:13 
W20161022-07:22:26.868(3)? (STDERR)  at arrayEach (/home/mohammed/poly/synthesis-demo/node_modules/lodash/lodash.js:451:11) 
W20161022-07:22:26.870(3)? (STDERR)  at Function.forEach (/home/mohammed/poly/synthesis-demo/node_modules/lodash/lodash.js:8634:14) 
W20161022-07:22:26.872(3)? (STDERR)  at server/main.js:55:13 
W20161022-07:22:26.873(3)? (STDERR)  at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3) 

ответ

0

_.each передаст элемент только функции, вы пытаетесь передать два. Вам нужно использовать функцию, чтобы сделать это

_.each(json,(item) => { 
    myFunction(item); 
}); 

и объявить эту функцию:

var myFunction = function(passedItem) { 
Meteor.bindEnvironment((eer, passedItem) => { 
    var project_Id = projectsCollction.insert(
     passedItem) 
    console.log(`projict ${project_Id}`); 
    }) 
} 
+0

Можете ли вы поставить это в плункер или скрипку или подобное? – Mikkel

+0

https://embed.plnkr.co/5qjWKyN7hubmlAUYbAG4/ –

+0

@mohammedbarqawi Прошу прощения, просто вставка вышеуказанного кода в плункер не помогает мне. Я готов помочь, но вы должны предоставить что-то, что позволит мне воспроизвести вашу проблему, не выполняя кучу работы. Возможно, вы могли бы поделиться со мной проектом метеор? Вы можете поместить его в github и поделиться им, или если вы предпочитаете держать его в секрете, вы можете использовать bitbucket – Mikkel

0

я обнаружил, что функция bindEnvironment была в неправильном месте

fs.readFile(base + '/server/json/projects.json', 'utf8', 
    Meteor.bindEnvironment(function(err, 
     data) { 
     if (err) throw err; 
     console.log(data); 
     var json = JSON.parse(data); 
     _.each(json, (item) => { 
     var project_Id = projectsCollction.insert(
      item) 
     console.log(`project ${project_Id}`); 

     }); 
    })