Обещание - вложенная функция не работает - PullRequest
0 голосов
/ 29 января 2019

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

var calculus = new Promise((resolve, reject) => (resolve) => resolve(3))

var calculus2 = new Promise((resolve, reject) => {
  () => resolve(4)
})

calculus.then((result) => console.log(result))
calculus2.then((result) => console.log(result))

любой намек был бы великолепен, спасибо

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Примечание: Бармар был быстрее с их ответом, и, читая его, я думаю, что я неправильно истолковал то, что вы спрашивали.Тем не менее, я все еще собираюсь опубликовать это, поскольку это может помочь уточнить, что именно происходит в вашем примере.

Ваша первая строка,

var calculus = new Promise((resolve, reject) => (resolve) => resolve(3))

Возвращает что-то сопоставимое собъект, подобный этому (хотя за кадром он сильно отличается):

{
  then: function(callback) {
    callback(function (resolve) {
      resolve(3);
    });
  }
}

Итак, чтобы использовать это, вы хотели бы сделать что-то вроде этого:

calculus.then((resolver) => {
  resolver(function (value) {
    console.log(value); // 3
  });
});

Я думаю, что вы 'Вероятно, это означает следующее:

const calculus = new Promise((resolve, reject) => resolve(3));
calculus.then((result) => console.log(result))

Помните, что () => {} похож (хотя и не совсем то же самое) на function() {}, а () => something похож на function () { return something }

Таким образом, ваш оригинальный код выглядит так:

var calculus = new Promise(function (resolve, reject) {
  return function (resolve) {
    resolve(3)
  };
});

Когда вы хотите

var calculus = new Promise(function (resolve, reject) {
  resolve(3);
});
0 голосов
/ 29 января 2019

Вам нужно вызвать вложенную функцию.

var calculus = new Promise((resolve, reject) => ((resolve) => resolve(3))(resolve))

calculus.then((result) => console.log(result))

Если вы не хотите повторять (resolve) в конце, вы можете избавиться от параметра для вложенной функции.

var calculus = new Promise((resolve, reject) => (() => resolve(3))())

calculus.then((result) => console.log(result))

В любом случае нет особого смысла во вложенной функции, вы можете просто написать:

var calculus = new Promise((resolve, reject) => resolve(3))

calculus.then((result) => console.log(result))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...