承诺链如何断言哪个值来自哪个 return 值?

How can promise chains assert that which value is from which return value?

我目前正在学习 Electron in Action。我在旅途中学习 JavaScript 而这并没有出现在 google 中所以我想我会在这里问它。假设我们有这样的代码:

newLinkForm.addEventListener('submit', (event) => {
  event.preventDefault();
  const url = newLinkUrl.value;
  fetch(url)
    .then(response => response.text())
    .then(parseResponse)
    .then(findTitle)
    .then(title => storeLink(title, url))
    .then(clearForm);
});

在链的第一个和第四个环中,我们为第零个和第三个函数的 return 值命名。但是,如果有多个 return 值怎么办?我们创建一个列表吗?我们可以在承诺链中调用两个函数吗:

then(returnvalue1=>funct1, returnvalue2=>funct2)

我们能做到吗?感谢您的回复。

一个 promise 只有一个解析值,所以 .then() 处理程序只传递一个参数。

如果您想解析具有多个值的承诺,那么您通常会将它们包装在一个数组或一个对象中,并且单个解析值将是数组或对象。

您可以使用解构来轻松引用包装在对象或数组中的多个值。

示例:

Promise.resolve([1,2]).then(result => {
    console.log(result);     // logs [1,2]
    return result;           // pass the array on to the next step
}).then(([a, b]) => {          // use destructuring to get the two items out of the array
   console.log(a); 
   console.log(b);
});

你这样提议的:

.then(returnvalue1=>funct1, returnvalue2=>funct2)

完全不同。在这里,您将两个函数传递给 .then(),如 .then(f1, f2) 中那样(或者看起来像您正在尝试做的那样)。当您将第二个函数传递给 .then() 时,第二个函数是一个拒绝处理程序(如 .catch() 处理程序),并且只有在承诺拒绝并且参数是拒绝原因时才会调用它。

第二个 then 参数保留给错误处理程序,then(returnvalue1=>funct1, returnvalue2=>funct2) 不是处理 return 值的正确方法。

then 回调接收唯一一个 return 值作为参数,前一个 then 回调 returns.

的值

如果来自不同 then 的值需要一起使用,它们应该作为数组或对象值通过整个承诺链传递并解构:

promise
.then(foo => {
   const bar = 'bar';
   return [foo, bar];
 })
.then(([foo, bar]) => {
  // can access both foo and bar
})

then 应嵌套以访问必要值可用的范围:

promise
.then(foo => {
   const bar = 'bar';

   return Promise.resolve(bar);
   .then(bar => {
     // can access both foo and bar
   })
 })

这是async..await解决的问题之一。