JavaScript параметр, используемый в функции стрелки, но не объявленный нигде в локальной области видимости - функция Twilio - PullRequest
1 голос
/ 23 марта 2020

Я работаю над уже существующей функцией Twilio и пытаюсь понять, как работает следующий код. Я проверял это несколько раз, и пока я отправляю «с» номера телефона любое сообщение, я получаю ответ, описанный в «теле». Однако я пытаюсь понять, как могут существовать параметры «msg» и «err», учитывая, что они не объявлены где-либо еще в функции. Может кто-нибудь помочь мне понять, как эти параметры действительны? Я новичок в JavaScript и понимаю только основы обратных вызовов и обещаний.

РЕДАКТИРОВАТЬ: я начинаю понимать идею больше. Таким образом, операторы then и catch являются обратными вызовами, которые происходят после завершения функции create (). Спасибо за ответы, которые помогли мне понять.

  exports.handler = function(context, event, callback) {
  context.getTwilioClient().messages.create({
    to: '+14806484732 ',
    from: '+12133151685',
    body: 'Remember the special today is Shrimp Scampi'
  }).then(msg => {
    callback(null, msg.sid);
  }).catch(err => callback(err));
}

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Функции, указанные в then и catch, являются обратными вызовами, которые обе принимают один параметр. Каждый из этих параметров имеет значение c, основанное на документации по функциям, которую вы можете найти. Однако вы можете звонить им как угодно, если сами пишете обратные вызовы. Имена просто выбираются так, чтобы передать семантику как можно более четко.

Таким образом, они, по сути, являются просто параметрами анонимной функции.

Я настоятельно рекомендую просмотреть обратные вызовы в Javascript, поскольку они используются повсеместно.

0 голосов
/ 23 марта 2020

err => callback(err) - это объявление функции. один параметр err, выполняющий функцию callback

аналогичная ситуация с

.then(msg => { // `msg` is a single parameter of declared function
  callback(null, msg.sid);
}

Пример

const callback = argument => console.log(argument)
// this line is similar to
// const callback = (argument) => { console.log(argument) }
// also similar to
// function callback(argument) { console.log(argument) }

const func = err => callback(err)
// this line is similar to
// const func = (err) => { callback(err) }
// also similar to
// function func(err) { callback(err) }

func('test')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...