![](/img/trans.png)
[英]how to dynamic chain a promise inside a function in javascript?
[英]How to create javascript promise chain with array function?
在创建 js promise 链时,我遇到了一个奇怪的问题。在 promise 中,当我使用数组 function 和 () 时,我没有得到预期的值。
这是js代码:
let x = new Promise((resolve, reject) => { setTimeout(() => { resolve('sonet970@gmail.com'); }, 2000); }); function y(email) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(email); }, 4000); }); } x.then((res) => { y(res); }).then((res) => { console.log(res); }).catch((err) => { console.log(err); });
但是当我没有在.then 中使用 ()=>{} 语法时,我得到了预期的答案。
这是赖特代码的示例:
let x = new Promise((resolve, reject) => { setTimeout(() => { resolve('sonet970@gmail.com'); }, 2000); }); function y(email) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(email); }, 4000); }); } x.then((res) => y(res)).then((res) => console.log(res)).catch((err) => console.log(err));
谁能帮我解决这个问题? 感谢进阶。
为了链接承诺,您需要返回 Promise。 此示例正常工作
x.then((res) => y(res))
.then((res) => console.log(res))
.catch((err) => console.log(err));
因为(res) => y(res)
意味着:
(res) => {
return y(res)
}
并且 y() promise 的结果被传递给下一个.then
所以要解决你的代码,你需要这样写:
x.then((res) => {
// do some calculations
return y(res);
})
.then((res) => {
// result of y promise
console.log(res);
})
.catch((err) => {
console.log(err);
});
使用花括号{}
从function
返回一些东西意味着您需要使用关键字return
来返回一些东西:
x.then((res) => {
return y(res);
});
使用箭头函数,如果没有添加花括号,则返回=>
之后的立即值。
then((res) => console.log(res));
谢谢大家的回答。现在我明白了,为什么我的第一个代码不起作用。这都是关于数组 function,没有任何承诺!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.