Javascript承诺给定TypeError函数是未定义的



下面的代码给出了正确的结果。但是,如果then(callback('sum'((从promisesumOfPromises中删除,并添加到对sumOfPromises的调用中(如下所示:sumOfPromise((.then(回调('sum'(((,则我得到类型错误:sumOfPromines(…(未定义。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>

您在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'));
}

您需要从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>

最新更新