我真的很难将Javascript承诺集成到我的代码中,并希望对此有所帮助。
我有这个简单的函数,它是处理文件创建,读取,更新和删除的程序的一部分,因此我决定将其从使用回调更改为使用promises。
这是删除功能:
lib.delete = (dir, file, callback) => {
/* unlink the file */
fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
if (!err) {
callback(false);
} else {
callback(' Error deleting file');
}
});
};
我打算这样做的方法是将异步部分包含在一个承诺中:
lib.delete = (dir, file, callback) => {
/* unlink the file */
return new Promise((resolve, reject) => {
fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
if (!err) {
resolve(false);
} else {
reject(err);
}
});
});
});
但这一切似乎都是错误的,因为我在这里定义了承诺,但实际上我实际上想要使用它,即用.then
来处理它的结果。
我遗漏了一些基本的东西,我有这种感觉,我需要改变我正在考虑全部删除功能的方式...... 任何帮助将不胜感激。
答案 0 :(得分:0)
如果你想使用Promise
,你没有将callback
传递给这些论点,那就是承诺的目标:在解决/拒绝后调用你想要的任何功能
例如:
使用回调:
lib.delete = (dir, file, callback) => {
/* unlink the file */
fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
if (!err) {
callback(false);
} else {
callback(' Error deleting file');
}
});
};
lib.delete('./dir', 'filname.txt', function(res){
console.log(res);
})
承诺
lib.delete = (dir, file) => {
return new Promise((resolve, reject) => {
fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
if (!err) {
resolve(false);
} else {
reject(err);
}
});
});
});
lib.delete('./dir', 'filname.txt')
.then( () => console.log("No error i'm happy")
.catch( (err) => console.log('Error', err)
then
:解析时触发执行
catch
:当拒绝是触发器时执行
我希望它会帮助你!