javascript - javascript 承诺定义和使用
问题描述
我真的很努力将 Javascript 承诺集成到我的代码中,并希望能在这方面提供一些帮助。
我有这个简单的函数,它是处理创建、读取、更新和删除文件的程序的一部分,所以我决定将它从使用回调更改为使用 Promise。
这是删除功能:
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);
}
});
});
});
但这一切似乎都是错误的,因为我在这里定义了 Promise,但这里实际上是我真正想要使用它的地方,即用.then
.
我在这里缺少一些基本的东西,我有这种感觉,我需要改变我对所有删除功能的思考方式......任何帮助将不胜感激。
解决方案
如果你想使用Promise
你没有将 a 传递给callback
这些参数,这是 promise 的目标:在解析/拒绝之后调用你想要的任何函数。
例如 :
带回调:
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
: 当拒绝被触发时执行
我希望它会帮助你!
推荐阅读
- angular - 拖放表中的行而不交换
- angular - 某些打字稿库中使用的“@”前缀是什么意思
- kubernetes-helm - “helm list --all”的输出为空
- excel - 返回带有标题的已过滤 Excel 表格
- android-service - Android服务需要定期上网
- javascript - 如何避免意外隐式引用全局对象上的属性?
- prolog - Get index of given element in list
- docker - Teamcity - 未满足的要求:docker.server.osType 包含 windows
- javascript - 通过 JS 更改 CSS
- python - NotAllowedError create_login_url