创建Promise, 应该怎么写
发布于 8 年前 作者 immatt2015 7189 次预览 最后一次回复是 8 年前 来自 问答
在看同事代码时候发现一处写法:
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()
})
})
10 回复
看你要如何用,不管是reject还是resolve返回的都是一个promise,因此可以链式调用 你在fs.unlink的回调函数里返回有意义么?没意义。 注意任何一个函数如果你不显式返回,默认都是返回undefined。 回调里resolve, reject函数调用返回的都是undefined,所以
return resolve()等价于resolve(); return undefined;等价于resolve(),对于reject同样。 哪个好一点相信楼主心中已经很清楚了两种写法效果也是一样的,都没什么问题
这是问箭头函数用法,你应该看看这篇文章 https://cnodejs.org/topic/584a207a3ebad99b336b1ede
其实我想问的是 Promise 构造函数中的resolve 和 reject 调用 时, 该不该 return 掉, 停止执行后面的逻辑。
应该 return 并且应该规范编写:
@immatt2015 觉得需要看代码的上下文才能定这个~
主要看场景,如果err只是为了提示错误,而不中断的话,无所谓
請寫好if-else就不存在上面提到的問題了。
你们平时写的时候真的是 (resolve, reject) 全写嘛… 我都是写 (yes,no) 的…
0.前提,abc.txt不存在. 1.则会打印 [2] 和 [5] 2.如果在[1]加了return,则只会打印[5] 3.如果采用if(err){}else{}这样的写法,只会打印[5] 个人建议使用return写法,在不写完整if-else的情况下,[2]也会被执行.