«Это 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реализация метода.
~
Эта статья окончена, спасибо за чтение!
~
Получайте интересные знания, встречайте интересных друзей и формируйте интересные души!
Привет всем, я〖Программирование самадхи〗авторКороль-затворник, мой официальный аккаунт "Программирование самадхи』, пожалуйста, обратите внимание, я надеюсь, что вы можете дать мне больше советов!