Javascript承诺给TypeError函数未定义

时间:2020-04-03 11:44:34

标签: javascript promise typeerror

下面的代码给出正确的结果。 但是,如果将 then(callback('sum'))从承诺 sumOfPromises 中删除,并添加到对 sumOfPromises 的调用中,例如:< em> sumOfPromises()。then(callback('sum'))),然后出现 TypeError:sumOfPromises(...)未定义。 我无法理解的 sumOfPromises 中有一些错误。

<pre>P_1 is : <span id=p_1>p_1</span></pre>
<pre>P_2 is : <span id=p_2>p_2</span></pre>
<pre>Sum is : <span id=sum>sum</span></pre>

<script>
 promise_1().then(callback('p_1'));
 promise_2().then(callback('p_2'));
 sumOfPromises(); // sumOfPromises().then(callback('sum')); gives TypeError: sumOfPromises(...) is undefined (see below)

 function callback(tag) {
     const result = obj => {
	 let e = document.getElementById(tag);
	 e.innerHTML = obj;
     };
     return result
 }

 function sumOfPromises() {
     const promises = [promise_1(), promise_2()];
     
     Promise.all(promises).then(function (data) {
	 return sumOfData(data)
     }).then(callback('sum')); // then moved to top gives TypeError: sumOfPromises(...) is undefined (see upper)
 }
 
 function sumOfData(data) {
     const [p_1, p_2] = data;
     console.log('sumOfData input p_1 '+p_1);
     console.log('sumOfData input p_2 '+p_2);
     
     return new Promise ( (resolve) => {
	 var result = p_1 + p_2;
	 console.log('sumOfData result '+result);
	 resolve(result)
     });
 } 

 function promise_1() {
     return new Promise((resolve) => {
	 const value = Math.random();
	 console.log('promise_1 value '+value);
	 resolve(value);
     })
 }

 function promise_2() {
     return new Promise((resolve, reject) => {
	 const value = - Math.random();
	 console.log('promise_2 value '+value);
	 resolve(value);
     })
 }

</script>

2 个答案:

答案 0 :(得分:2)

您不会在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 :(得分:1)

您需要从sumOfPromises返回promise。由于在您的代码中sumOfPromises中没有return语句,因此javaScript隐式返回undefined,因此您最终会遇到这样的调用

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

<pre>P_1 is : <span id=p_1>p_1</span></pre>
<pre>P_2 is : <span id=p_2>p_2</span></pre>
<pre>Sum is : <span id=sum>sum</span></pre>

<script>
 promise_1().then(callback('p_1'));
 promise_2().then(callback('p_2'));
 sumOfPromises().then(callback('sum'));
 
 function callback(tag) {
     const result = obj => {
	 let e = document.getElementById(tag);
	 e.innerHTML = obj;
     };
     return result
 }

 function sumOfPromises() {
     const promises = [promise_1(), promise_2()];
     
     return Promise.all(promises).then(function (data) {
	 return sumOfData(data)
     }) 
 }
 
 function sumOfData(data) {
     const [p_1, p_2] = data;
     console.log('sumOfData input p_1 '+p_1);
     console.log('sumOfData input p_2 '+p_2);
     
     return new Promise ( (resolve) => {
	 var result = p_1 + p_2;
	 console.log('sumOfData result '+result);
	 resolve(result)
     });
 } 

 function promise_1() {
     return new Promise((resolve) => {
	 const value = Math.random();
	 console.log('promise_1 value '+value);
	 resolve(value);
     })
 }

 function promise_2() {
     return new Promise((resolve, reject) => {
	 const value = - Math.random();
	 console.log('promise_2 value '+value);
	 resolve(value);
     })
 }

</script>

相关问题