Promise.all在Node中是未定义的
我正在玩Node.js中的承诺,并试图使用Promise.all。 我推送了三个函数,它们将一个承诺返回给一个数组,然后调用Promise.all,但所有的决心都不会被触发。 在调试器上,它也表示Promise.all是“未定义的”。
为什么是Promise.all从不返回,为什么它显示为“未定义”?
代码的相关部分:
var updates = [];
updates.push(data.updateItemCondition(characterID, specificItemID_toUse, newCondition));
updates.push(data.updateCharacterLoot(characterID, newValue));
updates.push(data.updateSharedLoot(lootUpdateChange));
Promise.all(updates).then(function (success) {
resolve("Item successfully used");
}, function (error) {
resolve("Failed to use item " + error.toString());
});
所有三个函数看起来像下面的内容,并使用调试器,我可以看到所有三个解决方案都被击中(并且io.writeFile上的所有三个对应文件都在磁盘上更新)
data.updateSharedLoot= function (lootUpdateChange) {
return new Promise(function (resolve, reject) {
//some logic
io.writeFile(...,function(callbackSuccess){
resolve(callbackSuccess);
});
});
}
这很奇怪,因为我有Promise.all,即使在旧版本的Node 0.12上也是如此。 在节点0.10上我没有定义Promise。 我不认为有Promise的版本,但没有Promise.all。 也许你在做:
Promise.all = 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);
}
});
});
}
但是,我仍然建议使用承诺的I / O版本,如fs-promise,如果你承诺承诺。 返回承诺的函数可能如下所示:
var fsp = require('fs-promise');
data.updateSharedLoot = function (lootUpdateChange) {
return fsp.writeFile(...);
};
看到这个答案更多细节。
链接地址: http://www.djcxy.com/p/55365.html上一篇: Promise.all in Node is undefined
下一篇: Promise.all in JavaScript: How to get resolve value for all promises?