JavaScript代码,尝试立即解决承诺:
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;
哪个输出到控制台:
about to return
success
我有一个要求立即使promise返回(promise是在回调方法中创建的,并且该方法需要立即返回一个值,稍后返回数据意味着我们不再处于正确的上下文和值中) (尚未返回)已被使用(未定义)。
关于我可能做错了什么的任何建议?
更新:
<<<promise maker>>>
是对依赖关系的调用,该依赖关系返回了承诺;
答案 0 :(得分:0)
您似乎希望Promise.resolve(promise)
立即停止,等到诺言解决后再继续。那将接近同步执行。
但是,Promise.resolve(value)
返回的 Promise 会立即以value
进行解决,而不会解决现有的Promise。
您正在寻找的是await
(或仅是Promise.then
):
var promise = <<<promise maker>>>.then(function (myContent) {
console.log("success");
}, function () {
console.log("fail!");
});
promise.then(function() {
console.log("about to return");
});
您可能会发现我在代码段中遗漏了promiseData
。这是因为为了在正确的时刻返回数据,您也必须在那里异步。因此,您实际上必须返回一个将用promiseData
解决的Promise,它归结为:
<<<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!'); })
答案 1 :(得分:0)
如果我没记错的话,此函数流程就在您所需的范围内,但是它还会返回一个已分解为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!");
}
}