Javascript обещаний, дающих функцию TypeError, не определено - PullRequest
1 голос
/ 03 апреля 2020

Код ниже дает правильный результат. Но если , то (callback ('sum')) удаляется из обещания sumOfPromises и добавляется к вызову sumOfPromises (например: sumOfPromises () .then (обратный вызов ('sum')) ), тогда я получаю TypeError: sumOfPromises (...) не определено . В sumOfPromises что-то не так, что я не могу понять.

P_1 is : p_1
P_2 is : <span id=p_2>p_2</span>
Sum is : <span id=sum>sum</span>
обещание_1 (). Затем (обратный вызов ('p_1')); promise_2 (), а затем (обратный вызов ( 'p_2')). sumOfPromises (); // sumOfPromises (). then (callback ('sum')); дает TypeError: sumOfPromises (...) не определен (см. ниже) обратный вызов функции (тег) {const result = obj => {let e = document.getElementById (tag); e.inner HTML = obj; }; возврат результата} function sumOfPromises () {const promises = [обещание_1 (), обещание_2 ()]; Promise.all (обещания) .then (function (data) {вернуть sumOfData (data)}). Then (callback ('sum')); // затем перемещение в начало дает TypeError: sumOfPromises (...) не определено (см. выше)} function sumOfData (data) {const [p_1, p_2] = data; console.log ('вход sumOfData p_1' + p_1); console.log ('вход sumOfData p_2' + p_2); вернуть новое Promise ((решить) => {var result = p_1 + p_2; console.log ('sumOfData result' + result); resol (result)}); } функция обещание_1 () {возврат нового Promise ((resol) => {постоянное значение = Math.random (); console.log ('обещание_1 значение' + значение); resol (значение);})} функция обещание_2 () { вернуть новое обещание ((разрешить, отклонить) => {постоянное значение = - Math.random (); console.log ('значение обещания_2' + значение); разрешить (значение);})}

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Вы ничего не возвращаете в sumOfPromises, поэтому вы не можете прикрепить к нему обратные вызовы, поскольку undefined:

 function sumOfPromises() {
     const promises = [promise_1(), promise_2()];

     return Promise.all(promises).then(function (data) { // Add 'return' here
       return sumOfData(data)
     }).then(callback('sum'));
 }
1 голос
/ 03 апреля 2020

Вам необходимо вернуть обещание от sumOfPromises. Так как в вашем коде у вас нет оператора return в sumOfPromises javaScript, то неявно возвращают undefined, поэтому вы в конечном итоге получаете такой вызов

undefined.then(callback('sum'));  // which is an error

P_1 is : p_1
P_2 is : <span id=p_2>p_2</span>
Sum is : <span id=sum>sum</span>
обещание_1 (). Затем (обратный вызов ('p_1')); promise_2 (), а затем (обратный вызов ( 'p_2')). sumOfPromises () затем (обратный вызов ( 'сумма')). функция обратного вызова (тег) {const result = obj => {let e = document.getElementById (tag); e.inner HTML = obj; }; возврат результата} function sumOfPromises () {const promises = [обещание_1 (), обещание_2 ()]; return Promise.all (обещания) .then (function (data) {return sumOfData (data)})} function sumOfData (data) {const [p_1, p_2] = data; console.log ('вход sumOfData p_1' + p_1); console.log ('вход sumOfData p_2' + p_2); вернуть новое Promise ((решить) => {var result = p_1 + p_2; console.log ('sumOfData result' + result); resol (result)}); } функция обещание_1 () {возврат нового Promise ((resol) => {постоянное значение = Math.random (); console.log ('обещание_1 значение' + значение); resol (значение);})} функция обещание_2 () { вернуть новое обещание ((разрешить, отклонить) => {постоянное значение = - Math.random (); console.log ('значение обещания_2' + значение); разрешить (значение);})}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...