Javascript обещания - поймать с / без функции

В ES6 вы можете использовать деструктурирование массива для захвата ваших групп:

let text = '27 months';
let regex = /(\d+)\s*(days?|months?|years?)/;
let [, count, unit] = text.match(regex) || [];

// count === '27'
// unit === 'months'

Примечание:

  • первая запятая в последнем let пропускает первое значение результирующего массива, который представляет собой всю согласованную строку
  • , || [] после .match() предотвратит ошибку разрушения, если совпадений нет (поскольку .match() вернет null)
1
задан Roberto Gutierrez 18 January 2019 в 10:08
поделиться

1 ответ

catch() и then() ожидают получить функцию в качестве аргумента. В вашем примере OnRejected - это функция, а console.log("This is an error") - нет.

Чтобы объяснить немного больше: console.log является функцией, но console.log('something') является результатом выполнения функции console.log с аргументом 'something'.

Чтобы вернуться к catch() и then(), они вызовут метод, который вы ему дадите (в вашем примере: OnRejected), и вызовете его с аргументом, каким бы он ни был возвращен ранее разрешенным обещанием.

Пример:

getDataFromDistantServer().then(function (data) => {
    console.log(data)
    return otherCallToOtherServer()
}).then( function (dataFromOtherServer) => {
    console.log(dataFromOtherServer)
})

Это также будет работать, потому что doSomething является функцией:

var doSomething = function(data) {
    console.log(data)
    return otherCallToOtherServer()
}

getDataFromDistantServer()
    .then(doSomething)
    .then( function (dataFromOtherServer) => {
        console.log(dataFromOtherServer)
    })

Примечание : соглашение об именах для вашей функции [ 1114] будет предписывать не начинать имя с заглавной буквы и называть его onRejected

0
ответ дан Tom 18 January 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: