[英]Promise.reject() vs return promise.reject()
我一直在尝试理解以下两者之间的区别,这是一种闲置的使用方式:
let getClient = () => {
return connect()
.then((client) => {
return Promise.resolve(client);
})
.catch((err) => {
return Promise.reject(err);
}
}
和
let getClient = () => {
return connect()
.then((client) => {
Promise.resolve(client);
})
.catch((err) => {
Promise.reject(err);
}
}
和
let getClient = () => {
return new Promise((resolve, reject) => {
return connect()
.then((client) => {
resolve(client);
})
.catch((err) => {
reject(err);
})
})
}
有人可以帮助我了解其中的区别吗? 返回Promise.resove / reject是否与仅使用Promise.resolve / reject有所不同?
它们都是不好的例子。
then
connect()
then
可以了,因此大概返回了一个Promise。 创建额外的promise除了返回另一个promise的结果外什么也不做,这会使事情变得更加复杂。
您可以将整个内容重写为:
let getClient = connect;
…并获得几乎相同的东西(除非您随后要去应用一些奇怪的边缘情况)。
您的第一个示例采用解析连接承诺的结果,创建一个新的承诺并立即以相同的值对其进行解析,然后返回该连接承诺所采用的那个承诺。
你的第二个例子做同样的事情,只是没有通过,所以原来的连接承诺的结果是,在未来可then
链。 (这些结果与上一个示例中逐步实现额外承诺的结果相同)。
第三个示例在connect
调用之外创建了一个新的Promise,然后使用connect
的值来解决它。 这是另一个毫无意义的额外承诺。
一个好问题。 在您的示例中,第一个和最后一个片段产生相同的结果。 但是第二个将使您不确定,因为您没有兑现承诺。 所花费的时间/操作顺序也不同。
const connect = (input) => new Promise((res, rej) => (!!input ? res('Success') : rej('Failure'))); let getClient_0 = (input) => { return connect(input) .then((client) => { return Promise.resolve(client); }) .catch((err) => { return Promise.reject(err); }) } let getClient_1 = (input) => { return connect(input) .then((client) => { Promise.resolve(client); }) .catch((err) => { Promise.reject(err); }) } let getClient_2 = (input) => { return new Promise((resolve, reject) => { return connect(input) .then((client) => { resolve(client); }) .catch((err) => { reject(err); }) }) } getClient_0(1).then((r) => console.log('getClient_0 -> ',r)).catch(e => console.log('getClient_0 -> ',e)); getClient_0(0).then((r) => console.log('getClient_0 -> ',r)).catch(e => console.log('getClient_0 -> ',e)); getClient_1(1).then((r) => console.log('getClient_1 -> ',r)).catch(e => console.log('getClient_1 -> ',e)); getClient_1(0).then((r) => console.log('getClient_1 -> ',r)).catch(e => console.log('getClient_1 -> ',e)); getClient_2(1).then((r) => console.log('getClient_2 -> ',r)).catch(e => console.log('getClient_2 -> ',e)); getClient_2(0).then((r) => console.log('getClient_2 -> ',r)).catch(e => console.log('getClient_2 -> ',e));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.