javascript没有解决承诺
Javascript代码,正在尝试立即解析承诺:javascript没有解决承诺,javascript,promise,Javascript,Promise,Javascript代码,正在尝试立即解析承诺: var promiseData; var promise = <<<promise maker>>>.then(function (myContent) { console.log("success"); }, function () { console.log("fail!")
var promiseData;
var promise = <<<promise maker>>>.then(function (myContent) {
console.log("success");
}, function () {
console.log("fail!");
});
Promise.resolve(promise)
console.log("about to return");
return promiseData;
我需要让承诺立即返回(承诺是在回调方法中创建的,该方法需要立即返回值,稍后返回数据意味着我们不再处于正确的上下文中,并且值(尚未返回)已被使用(未定义)
有没有关于我可能做错了什么的建议
更新:
是对返回承诺的依赖项的调用;看起来您希望承诺。resolve(promise)
立即停止,等待承诺得到解决,然后继续。这将接近同步执行
但是,Promise.resolve(value)
返回一个立即用value
解析的承诺,它不会解析现有的承诺
你要找的是等待(或者只是承诺。然后):
如果我没有错的话,这个函数流接近您所需要的,但它也返回一个解析为
promiseData
的承诺:
async function getPromiseData() {
try {
const promiseData = await <<<promise maker>>>;
console.log("success");
console.log("about to return");
return promiseData;
} catch (err) {
console.log("fail!");
}
}
异步函数getPromiseData(){
试一试{
const promiseData=等待;
控制台日志(“成功”);
console.log(“即将返回”);
归还承诺数据;
}捕捉(错误){
日志(“失败!”);
}
}
什么是“promise maker”?您希望promise.resolve(promise)做什么?您应该等待承诺,这样依赖于结果的任何代码在完成之前都不会运行。您不能像调用方期望的那样立即从异步操作返回值:@Nnoel然后您需要找到一种方法来避免“promise maker”,或者您需要更改框架(或者了解如何在框架中执行异步操作)Promissions的主要用途是当一个值不能立即使用时。我也建议使用async/callback,但OP说这不是一个选项-他们需要立即使用该值。@dominik…我对你的答案感到兴奋…但我不确定每个“then”中的“return”在哪里正在进行中,然后我看到了泰勒的评论,现在我完全困惑了:-(@Tyler,我的意思是,它需要等待承诺解决,然后才能继续代码的其余部分。
var promise = <<<promise maker>>>.then(function (myContent) {
console.log("success");
}, function () {
console.log("fail!");
});
promise.then(function() {
console.log("about to return");
});
<<<promise maker>>>
.then(function(promiseData) {
console.log('success');
return promiseData;
})
.then(function(promiseData) {
console.log('about to return');
return promiseData;
})
.catch(function(err) { console.log('fail!'); })
async function getPromiseData() {
try {
const promiseData = await <<<promise maker>>>;
console.log("success");
console.log("about to return");
return promiseData;
} catch (err) {
console.log("fail!");
}
}