在看同事代码时候发现一处写法:
new Promise((resolve, reject) => {
fs.unlink('***.json', err => {
if (err) reject(err)
resolve()
})
})
这种写法与下面的写法 那种会好一些?
new Promise((resolve, reject) => {
fs.unlink('****.json', err => {
if (err) return reject(err)
return resolve()
})
})
看你要如何用,不管是reject还是resolve返回的都是一个promise,因此可以链式调用
你在fs.unlink的回调函数里返回有意义么?没意义。
注意任何一个函数如果你不显式返回,默认都是返回undefined。
回调里resolve, reject函数调用返回的都是undefined,所以
return resolve()
等价于resolve(); return undefined;
等价于resolve()
,对于reject同样。
哪个好一点相信楼主心中已经很清楚了
两种写法效果也是一样的,都没什么问题
new Promise((resolve, reject) => {
fs.unlink('****.json', err => {
if (err) return reject(err)
// 假如这里还有一些逻辑,如果err了,但是不return reject(err) 的话,那么这里的代码还会继续执行
// 但实际你是不想要它继续执行的
return resolve()
})
})
这是问箭头函数用法,你应该看看这篇文章 https://cnodejs.org/topic/584a207a3ebad99b336b1ede
其实我想问的是 Promise 构造函数中的resolve 和 reject 调用 时, 该不该 return 掉, 停止执行后面的逻辑。
应该 return 并且应该规范编写:
new Promise((resolve, reject) => {
fs.unlink('****.json', (err) => {
if (err) { return reject(err) }
return resolve()
})
})
@immatt2015 觉得需要看代码的上下文才能定这个~
主要看场景,如果err只是为了提示错误,而不中断的话,无所谓
請寫好if-else就不存在上面提到的問題了。
你们平时写的时候真的是 (resolve, reject) 全写嘛… 我都是写 (yes,no) 的…
const fs = require('fs');
function create_promise() {
return new Promise((resolve,reject) => {
fs.readFile('./abc.txt',function (err,body) {
if(err){
reject(err);//1
}
console.log(`if not error,do something`);//2
resolve(body);//3
})
})
}
create_promise().then(res => {
console.log(`res = ${res}`);//4
},err => {
console.log(`err = ${err}`);//5
});
0.前提,abc.txt不存在. 1.则会打印 [2] 和 [5] 2.如果在[1]加了return,则只会打印[5] 3.如果采用if(err){}else{}这样的写法,只会打印[5] 个人建议使用return写法,在不写完整if-else的情况下,[2]也会被执行.