«Это 15-й день моего участия в первом испытании обновлений 2022 года. Подробную информацию о мероприятии см.:Вызов первого обновления 2022 г."
предисловие
Промис — крайне распространенная концепция на фронтенд-интервью и работе, а рукописная реализация его различных методов тоже очень востребована.Сегодня я подытожу простую реализацию основных методов промиса.
поймать () метод
catch
метод правильныйthen
Инкапсуляция метода, используемая только для полученияreject(reason)
сообщение об ошибке в .
Потому чтоthen
методonRejected
Параметр является необязательным, в противном случае сообщение об ошибке будет передаваться последовательно до тех пор, пока не будетonRejected
функция пока не получена, так что пишитеpromise
При объединении вызововthen
метод не прошелonRejected
функция, просто добавьте один в концеcatch()
Вот именно, чтобы в цепочкеpromise
Возникающие ошибки будутcatch
захвачен.
catch(onRejected) {
return this.then(null, onRejected);
}
метод done()
catch
существуетpromise
Вызывается в конце связанного вызова для перехвата сообщений об ошибках в цепочке, ноcatch
Ошибки также могут возникать внутри методов, поэтому некоторыеpromise
Добавил метод в реализациюdone
.
done
эквивалентно предоставлению безошибочногоcatch
метод и больше не возвращаетpromise
, обычно используется для завершенияpromise
цепь.
done() {
this.catch(reason => {
console.log('done', reason);
throw reason;
});
}
наконец() метод
finally
метод для любогоresolve
ещеreject
,finall
Функции параметров y будут выполнены.
finally(fn) {
return this.then(value => {
fn();
return value;
}, reason => {
fn();
throw reason;
});
};
Метод Promise.all()
Promise.all
метод получаетpromise
массив, возвращает новыйpromise2
, одновременно выполняет весь массивpromise
,всеpromise
статусresolved
час,promise2
Статусresolved
и вернуть всеpromise
результаты, порядок результатов иpromise
Массивы в том же порядке. если естьpromise
дляrejected
государство, весьpromise2
Войтиrejected
условие.
static all(promiseList) {
return new Promise((resolve, reject) => {
const result = [];
let i = 0;
for (const p of promiseList) {
p.then(value => {
result[i] = value;
if (result.length === promiseList.length) {
resolve(result);
}
}, reject);
i++;
}
});
}
Метод Promise.race()
Promise.race
метод получаетpromise
массив, возвращает новыйpromise2
, выполнить последовательность в массивеpromise
, Eстьpromise
статус в порядке,promise2
Состояние определено, и так же, как этоpromise
статус такой же.
static race(promiseList) {
return new Promise((resolve, reject) => {
for (const p of promiseList) {
p.then((value) => {
resolve(value);
}, reject);
}
});
}
Promise.resolve() и Promise.reject()
Promise.resolve
создатьrejected
идеальноpromise
,Promise.reject
создатьrejected
не удалосьpromise
.
static resolve(value) {
let promise;
promise = new Promise((resolve, reject) => {
this.resolvePromise(promise, value, resolve, reject);
});
return promise;
}
static reject(reason) {
return new Promise((resolve, reject) => {
reject(reason);
});
}
Суммировать
Это широко используемые методы,Promise
Также существует множество методов расширения, которые здесь не показаны по одному, в основном все они правильные.then
Дальнейшая инкапсуляция методов, еслиthen
С методом проблем нет, можно положиться на другие методыthen
реализация метода.
~
Эта статья окончена, спасибо за чтение!
~
Получайте интересные знания, встречайте интересных друзей и формируйте интересные души!
Привет всем, я〖Программирование самадхи〗авторКороль-затворник, мой официальный аккаунт "Программирование самадхи』, пожалуйста, обратите внимание, я надеюсь, что вы можете дать мне больше советов!