承诺链如何断言哪个值来自哪个 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
解决的问题之一。
我目前正在学习 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
解决的问题之一。