在已履行的承诺中获得未定义的价值
Getting undefined values in fulfilled promises
我得到未定义的兑现承诺值:
0: {status: "fulfilled", value: undefined}
1: {status: "fulfilled", value: undefined}
2: {status: "fulfilled", value: undefined}
3: {status: "rejected", reason: TypeError: Failed to fetch}
4: {status: "rejected", reason: TypeError: Failed to fetch}
5: {status: "rejected", reason: TypeError: Failed to fetch}
如何获取兑现的promise的value属性中的数据?
编辑: 我添加了 return dataObj
语句,但无济于事。
var fetchArr = [];
var url1 = "url1";
fetchArr.push(fetch(url1).then(
response => {
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
var url2 = "url2";
fetchArr.push(fetch(url2).then(
response => {
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
var url3 = "url3"
fetchArr.push(fetch(url3).then(
response => {
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
Promise.allSettled(fetchArr).then(function(dataArr) {
console.log(dataArr);
});
// Polyfill for Promise.allSettled
if (!Promise.allSettled) {
const rejectHandler = reason => ({ status: "rejected", reason });
const resolveHandler = value => ({ status: "fulfilled", value });
Promise.allSettled = function(promises) {
const convertedPromises = promises.map(p => Promise.resolve(p).then(resolveHandler, rejectHandler));
return Promise.all(convertedPromises);
};
}
在你的第一个回调中,然后打电话给你 return 任何事情:
fetchArr.push(fetch(url1).then(
response => {
// There is no return here
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
所以如果你这样做它会起作用:
fetchArr.push(
fetch(url1).then(response => {
// return here
return response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
})
})
);
关于链式 Promise 的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#chained_promises
我得到未定义的兑现承诺值:
0: {status: "fulfilled", value: undefined}
1: {status: "fulfilled", value: undefined}
2: {status: "fulfilled", value: undefined}
3: {status: "rejected", reason: TypeError: Failed to fetch}
4: {status: "rejected", reason: TypeError: Failed to fetch}
5: {status: "rejected", reason: TypeError: Failed to fetch}
如何获取兑现的promise的value属性中的数据?
编辑: 我添加了 return dataObj
语句,但无济于事。
var fetchArr = [];
var url1 = "url1";
fetchArr.push(fetch(url1).then(
response => {
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
var url2 = "url2";
fetchArr.push(fetch(url2).then(
response => {
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
var url3 = "url3"
fetchArr.push(fetch(url3).then(
response => {
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
Promise.allSettled(fetchArr).then(function(dataArr) {
console.log(dataArr);
});
// Polyfill for Promise.allSettled
if (!Promise.allSettled) {
const rejectHandler = reason => ({ status: "rejected", reason });
const resolveHandler = value => ({ status: "fulfilled", value });
Promise.allSettled = function(promises) {
const convertedPromises = promises.map(p => Promise.resolve(p).then(resolveHandler, rejectHandler));
return Promise.all(convertedPromises);
};
}
在你的第一个回调中,然后打电话给你 return 任何事情:
fetchArr.push(fetch(url1).then(
response => {
// There is no return here
response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
});
}
));
所以如果你这样做它会起作用:
fetchArr.push(
fetch(url1).then(response => {
// return here
return response.json().then(function(data) {
var dataObj = {};
dataObj.playlistNumber = i;
dataObj.data = data;
return dataObj;
})
})
);
关于链式 Promise 的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#chained_promises