如何解决在承诺范围内获取,零星的反向链序
我将两个调用链接到一个使用 fetch 并返回一个 promise 的函数。
呼叫有时会以错误的顺序到达,相反。
我认为我的函数代码是错误的,源于对 promise、fetch 或两者的错误理解。
function shop(id) {
return new Promise(function(resolve,reject) {
fetch('/shop',{
method: 'post',body: JSON.stringify({id: id}),headers: {'Content-type': 'application/json '}
}).then(function (response) {
return response.json();
}).then(function (data) {
console.log(data);
resolve(data);
})
})
}
shop('potatoe')
.then(shop('mushrooms'));
正如所解释的,这两个有时会以错误的顺序到达,蘑菇在土豆之前被购买。
我是否可以在 shop() 函数中错误地写入我的退货或解决()?
感谢您的帮助。
解决方法
主要问题是您立即同步调用 shop('mushrooms')
。您没有传递回调到 then
方法,而是执行预期的回调。所以把主要代码改成:
shop('potatoe')
.then(() => shop('mushrooms'));
这可以解决您的问题。
但是,您在函数中创建了一个无用的承诺。 fetch().then().then()
链已经返回一个承诺;你不需要再创建一个。阅读promise constructor antipattern。
因此删除此 new Promise
包装器,并删除仅用于调用 .then()
的最后一个 resolve
调用:
function shop(id) {
// return the promise returned by this promise chain:
return fetch('/shop',{
method: 'post',body: JSON.stringify({id: id}),headers: {'Content-type': 'application/json '}
}).then(function (response) {
return response.json();
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。