微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在承诺范围内获取,零星的反向链序

如何解决在承诺范围内获取,零星的反向链序

我将两个调用链接一个使用 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 举报,一经查实,本站将立刻删除。