Завод ничего не возвращает, он просто пишет в файл json. Я не могу понять, как использовать $ q в этом случае, чтобы убедиться, что это написано.
Это вызывает у меня проблемы в контроллере, потому что даже если я использую функцию обратного вызова, код не выполняется в правильном порядке ..
angular.module('jsonWrite', [])
.factory('JsonWrite', function($q) {
var nw = require('nw.gui');
var fs = require('fs');
var path = require('path');
var file = "myjsonfile.json";
var filePath = path.join(nw.App.dataPath, file);
var write = {};
write.writeJson = function(x){
var deferred = $q.defer();
fs.access(filePath, fs.F_OK, function(err) {
if (!err) {
fs.readFile(filePath, 'utf8', function(err, data) {
var myObj = JSON.parse(data);
myObj = x;
fs.writeFileSync(filePath, JSON.stringify(myObj));
});
}
else {
fs.open(filePath, "w", function(err, data) {
var myObj = {};
myObj = x;
fs.writeFileSync(filePath, JSON.stringify(myObj));
});
};
$q.resolve();
});
return deferred.promise;
};
return(write);
});
Это пример функции контроллера, даже если есть обратный вызов, JsonWrite не записывается до выполнения StateChanger.changeState. Это вызывает кучу неприятностей. Если я поставлю $ timeout на StateChanger, все будет хорошо работать - оно выполняется после того, как JsonWrite будет записано.
$scope.change = function(x){
function write(callback){
JsonWrite.writeJson(x);
callback();
};
function change(){
writemystuff(function(){
StateChanger.changeState(); // <- $timeout here and it works
})
};
change();
};
Если кто-то может дать мне представление о том, что может быть сделано, я был бы очень благодарен
Спасибо, Я читал о обещаниях часами, это все еще очень запутанно. – joropicha