如何与 2 个新的 Promise 相互通信
How to communicate with 2 new Promise with each other
所以我正在尝试将 2 个新的 Promise 相互连接起来,这样我就可以互相发送信息。所以我想使用第一个承诺中的 image.url
用于第二个承诺,但是当我想调用 image.url
时它是未定义的。有没有人有想法使这项工作? (顺便说一句,代码之间没有任何区别,只是想在 2 Promise 之间有所不同)。
第一个承诺:
image.promise = new Promise((resolve, reject) => {
const formData = new FormData();
formData.append('files', file);
axios
.post('http://api.resmush.it/', formData, { headers: { 'Content-Type': 'multipart/form-data' } })
.then(response => {
image.url = response.data.dest;
console.log("The compressed image url: ", image.url)
})
.catch(() => reject());
})
.then(response => {
image.status = STATUS_OK;
image.savings = response.data.percent;
})
第二个承诺:
image.promise = new Promise((reject) => {
console.log(image.url);
function downloadFile() {
axios
.get('http://par3.static.resmush.it/1e5b76fc993169757c1319c027f5dca3/insta_logo.jpg')
.then(response => {console.log(response)})
// .then(response => resolve(response))
.catch(() => reject());
// .catch(reject => {console.log(reject)})
}
downloadFile();
}
我不确定你为什么要使用这个模式,但是如果你想确保第二个承诺可以访问第一个调用中定义的东西,你必须确保不要在第一个承诺解决之前调用第二个承诺。
也许是这样的:
// ...
axios
.post('http://api.resmush.it/', formData, { headers: { 'Content-Type': 'multipart/form-data' } })
.then(response => {
image.url = response.data.dest;
// not sure what you want to do here, I just pasted your code
console.log(image.url);
function downloadFile() {
axios.get('http://par3.static.resmush.it/1e5b76fc993169757c1319c027f5dca3/insta_logo.jpg')
.then(response => {console.log(response)})
// ...
}
downloadFile();
})
所以我正在尝试将 2 个新的 Promise 相互连接起来,这样我就可以互相发送信息。所以我想使用第一个承诺中的 image.url
用于第二个承诺,但是当我想调用 image.url
时它是未定义的。有没有人有想法使这项工作? (顺便说一句,代码之间没有任何区别,只是想在 2 Promise 之间有所不同)。
第一个承诺:
image.promise = new Promise((resolve, reject) => {
const formData = new FormData();
formData.append('files', file);
axios
.post('http://api.resmush.it/', formData, { headers: { 'Content-Type': 'multipart/form-data' } })
.then(response => {
image.url = response.data.dest;
console.log("The compressed image url: ", image.url)
})
.catch(() => reject());
})
.then(response => {
image.status = STATUS_OK;
image.savings = response.data.percent;
})
第二个承诺:
image.promise = new Promise((reject) => {
console.log(image.url);
function downloadFile() {
axios
.get('http://par3.static.resmush.it/1e5b76fc993169757c1319c027f5dca3/insta_logo.jpg')
.then(response => {console.log(response)})
// .then(response => resolve(response))
.catch(() => reject());
// .catch(reject => {console.log(reject)})
}
downloadFile();
}
我不确定你为什么要使用这个模式,但是如果你想确保第二个承诺可以访问第一个调用中定义的东西,你必须确保不要在第一个承诺解决之前调用第二个承诺。 也许是这样的:
// ...
axios
.post('http://api.resmush.it/', formData, { headers: { 'Content-Type': 'multipart/form-data' } })
.then(response => {
image.url = response.data.dest;
// not sure what you want to do here, I just pasted your code
console.log(image.url);
function downloadFile() {
axios.get('http://par3.static.resmush.it/1e5b76fc993169757c1319c027f5dca3/insta_logo.jpg')
.then(response => {console.log(response)})
// ...
}
downloadFile();
})