Javascript 从另一个承诺中的承诺返回值
关于如何从承诺中回报价值,有很多问题,但我看不到任何答案 这是我的职责:Javascript 从另一个承诺中的承诺返回值,javascript,promise,Javascript,Promise,关于如何从承诺中回报价值,有很多问题,但我看不到任何答案 这是我的职责: function f1(arr, num) { return new Promise(function(resolve, reject) { resolve(data); }).then(function(data){ f2.then(function(d){ // how to return d }).catch(...);
function f1(arr, num) {
return new Promise(function(resolve, reject) {
resolve(data);
}).then(function(data){
f2.then(function(d){
// how to return d
}).catch(...);
function f2(data){
return new Promise(function(resolve, reject){
data = data + 1
resolve (data);
});
};
})
.catch(function(){...});
}
在这种配置中,我如何返回
d
?我想您正在寻找
function f1(arr, num) {
return new Promise(function(resolve, reject) {
resolve(data);
}).then(function(data){
return f2(data).then(function(d){
// ^^^^^^ don't forget this
// ^^^^^^ call the function
return d;
// ^^^^^^^^^ simply and literally return d
}).catch(...);
function f2(data){
return new Promise(function(resolve, reject){
data = data + 1
resolve (data);
});
};
})
.catch(function(){...});
}
或者写得更好
function f1(arr, num) {
return Promise.resolve(data)
.then(f2)
.catch(function(){...});
}
function f2(data){
return new Promise(function(resolve, reject){
… // do some async work
resolve(data + 1);
});
}
你不能。您不会从回调中返回。您给该回调另一个回调,然后将
d
传递给另一个回调并在那里使用它。使用回调时,必须依赖副作用。不过,这会慢慢溶入“回调地狱”,所以要小心。“返回d
”给谁/哪里?这里的“慢慢地”@Carcigenicate的意思是“立即”。@DaveNewton好吧,取决于你如何设置一切,你可能不会立即被咬。我设法从零开始为CS类编写了一个没有任何库的网站,但没有实现所谓的“地狱”,并且我严重依赖回调来完成异步模块加载。我知道大量使用回调是不好的,但我个人还没有看到它对我自己造成的最坏影响。我想我很幸运。应该注意的是,我对这个问题的理解很差(我的不好)。如果您是“手动”管理回调,则无法从回调返回,因为调用代码已经移动。但如果使用承诺,则可以返回,因为调用代码有一个“句柄”从中接收值。很抱歉给你带来了困惑。