JavaScript承诺:传递参数的常规方式
我如何将其他参数传递到承诺的下一个“步骤”JavaScript承诺:传递参数的常规方式,javascript,promise,Javascript,Promise,我如何将其他参数传递到承诺的下一个“步骤” new Promise((resolve, reject) => { const a = // do stuff and return a string return Promise.all([ // execute another promise, // execute yet another promise ]) }) .then(([resultFromPromise_1, resultFromPromise_2
new Promise((resolve, reject) => {
const a = // do stuff and return a string
return Promise.all([
// execute another promise,
// execute yet another promise
])
})
.then(([resultFromPromise_1, resultFromPromise_2]) => {
// how do i pass `const a` here?
})
我可以在Promise.all
数组中添加类似newpromise(resolve=>resolve(a))
的内容,但这看起来很难看。在这种情况下,是否有更好的方法传递数据
我可以在Promise.all
数组中添加类似newpromise(resolve=>resolve(a))
的内容,但这看起来很难看。在这种情况下,是否有更好的方法传递数据
是:使用然后使用。如果您已有承诺,则无需使用新承诺
then
创建一个承诺,该承诺等待您调用它的承诺的解决方案,然后使用您从then
回调返回的内容得到解决,或者在抛出异常时被拒绝。承诺的关键之一是如何使用然后
(和捕获
)在链中的每个环节转换事物
在这种特定情况下,您可以对原始承诺使用then
,并使用其回调来使用a
转换结果(尽管如果您想等到它们全部完成,您也可以这样做;稍后将介绍)
旁注:问题代码开头的new Promise
行不应该出现,您不能从承诺执行者那里返回承诺(您传递给new Promise
的回调)
例如:
const a=“一些字符串”;
我保证([
然后(结果=>结果+“-”+a),//***
getPromise(“两个”)
])
。然后(结果=>{
控制台日志(结果);
});
函数getPromise(str){
//(此处可以使用Promise.resolve;强调异步)
返回新承诺(解决=>{
设置超时(()=>{
决心(str);
}, 250);
});
}
我可以在Promise.all
数组中添加类似newpromise(resolve=>resolve(a))
的内容,但这看起来很难看。在这种情况下,是否有更好的方法传递数据
是:使用然后使用。如果您已有承诺,则无需使用新承诺
then
创建一个承诺,该承诺等待您调用它的承诺的解决方案,然后使用您从then
回调返回的内容得到解决,或者在抛出异常时被拒绝。承诺的关键之一是如何使用然后
(和捕获
)在链中的每个环节转换事物
在这种特定情况下,您可以对原始承诺使用then
,并使用其回调来使用a
转换结果(尽管如果您想等到它们全部完成,您也可以这样做;稍后将介绍)
旁注:问题代码开头的new Promise
行不应该出现,您不能从承诺执行者那里返回承诺(您传递给new Promise
的回调)
例如:
const a=“一些字符串”;
我保证([
然后(结果=>结果+“-”+a),//***
getPromise(“两个”)
])
。然后(结果=>{
控制台日志(结果);
});
函数getPromise(str){
//(此处可以使用Promise.resolve;强调异步)
返回新承诺(解决=>{
设置超时(()=>{
决心(str);
}, 250);
});
}
首先,你的第一个承诺有错误,你没有解决它。你应该这样做:
new Promise((resolve, reject) => {
const a = 1;
resolve(Promise.all([
...
]))
})
至于您的问题,您可以直接将a
传递给all
数组,而不是newpromise(resolve=>resolve(a))
。即:
new Promise((resolve, reject) => {
const a = 1;
resolve(Promise.all([
Promise.resolve("a"),
Promise.resolve("b"),
a,
]))
})
.then(([resultFromPromise_1, resultFromPromise_2, a]) => {
console.log(a);
})
首先,你的第一个承诺有错误,你没有解决它。你应该这样做:
new Promise((resolve, reject) => {
const a = 1;
resolve(Promise.all([
...
]))
})
至于您的问题,您可以直接将a
传递给all
数组,而不是newpromise(resolve=>resolve(a))
。即:
new Promise((resolve, reject) => {
const a = 1;
resolve(Promise.all([
Promise.resolve("a"),
Promise.resolve("b"),
a,
]))
})
.then(([resultFromPromise_1, resultFromPromise_2, a]) => {
console.log(a);
})
你能更具体地说明你想要实现什么吗?也许a有一个不使用a
的运行示例,并且(正如您在上面所做的)有一条注释,显示您想在哪里使用它以及您想用它做什么?您能更具体地说明您想实现什么吗?也许一个正在运行的示例没有使用a
,并且(正如您在上面所做的)一条注释显示了您想要在哪里使用它以及您想要用它做什么?newpromise(resolve=>{resolve(x);})
编写Promise.resolve(x)
只是一个很长的过程。在本例中,x
是Promise.all(…)
,它已经返回了一个Promise,所以它完全没有意义。:-)在Promise.all
中传递a
的有趣想法。如果您已经在使用Promise.all
,这绝对不是个坏主意!但它不是通用的解决方案……你说它不是通用的是什么意思?将值直接传递给all
数组是将更多参数传递给下一步的一种方式,这就是这个问题所要问的。我的意思是,如果您处理的是单个承诺,而不是使用promise.all
。虽然我想你可以添加Promise.all
,如果你还没有使用它的话。我想我会坚持使用闭包,但又是一个有趣的想法。我明白了,如果这是一个简单的承诺,那么您也可以只返回下一步的值,承诺返回可以是一个新的承诺,也可以只是一个值。newpromise(resolve=>{resolve(x);}
编写promise.resolve(x)
还有很长的路要走。在本例中,x
是Promise.all(…)
,它已经返回了一个Promise,所以它完全没有意义。:-)在Promise.all
中传递a
的有趣想法。如果您已经在使用Promise.all
,这绝对不是个坏主意!但它不是通用的解决方案……你说它不是通用的是什么意思?将值直接传递给all
数组是传递更多参数的一种方式