Ответ 1
Это странно, потому что у меня есть Promise.all, определенный даже на старом Node 0.12. На Node 0.10 У меня есть обещание не определено. Я не думаю, что есть версия с Promise, но без Promise.all. Может быть, вы делаете:
Promise.all = undefined;
Что вы должны иметь undefined - это функция resolve
. Здесь:
Promise.all(updates).then(function (success) {
resolve("Item successfully used");
}, function (error) {
resolve("Failed to use item " + error.toString());
});
у вас нет resolve
для вызова. Вы не имеете в виду console.log?
Promise.all(updates).then(function (success) {
console.log("Item successfully used");
}, function (error) {
console.log("Failed to use item " + error.toString());
});
Также здесь:
data.updateSharedLoot= function (lootUpdateChange) {
return new Promise(function (resolve, reject) {
//some logic
io.writeFile(...,function(callbackSuccess){
resolve(callbackSuccess);
});
});
}
первый параметр для вашего обратного вызова, вероятно, является ошибкой, поэтому вы должны:
data.updateSharedLoot= function (lootUpdateChange) {
return new Promise(function (resolve, reject) {
//some logic
io.writeFile(...,function(error, callbackSuccess) {
if (error) {
reject(error);
} else {
resolve(callbackSuccess);
}
});
});
}
Но я бы предложил использовать обещанную версию ввода-вывода, например fs-promise, если вы все равно выполняете promises. Ваша функция, которая возвращает обещание, может быть простой:
var fsp = require('fs-promise');
data.updateSharedLoot = function (lootUpdateChange) {
return fsp.writeFile(...);
};
Подробнее см. этот ответ.