Я пытался понять разницу между следующими двумя, и это простой способ использования:
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?
Все они плохие примеры.
connect()
then
может, поэтому он, по-видимому, возвращает обещание. Создание дополнительных обещаний, которые ничего не делают, кроме как возвращение результатов другого обещания чуть более усложняет ситуацию.
Вы могли бы переписать все это так:
let getClient = connect;
... и получить то, что более или менее идентично (если только вы тогда не поедете и не примените какие-то странные краевые случаи).
В первом примере мы рассмотрим результаты решения обещания соединения, создаем новое обещание и сразу же разрешим его с тем же значением, а затем вернем это обещание, которое принято обещанием соединения.
Ваш второй пример делает то же самое, за исключением без принятия, поэтому исходные результаты обещания соединения доступны в следующем, then
в цепочке. (Эти результаты идентичны тем, которые прошли предыдущий пример с дополнительным обещанием).
Ваш третий пример создает новое обещание вне вызова для connect
, а затем разрешает это со значением из connect
. Это еще одно бессмысленное дополнительное обещание.
let getClient = connect
» Это лучший способ подвести итог. Или, другими словами, не создавайте getClient
обертку getClient
потому что она на самом деле никак не улучшает 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));
Promise
!