我有一个这样的javascript代码:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
我的 var 测试总是有一个未定义的值。我认为这是因为Promise尚未解决……有没有办法从Promise中返回值?
我有一个这样的javascript代码:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
我的 var 测试总是有一个未定义的值。我认为这是因为Promise尚未解决……有没有办法从Promise中返回值?
当你从then()
回调中返回一些东西时,这有点神奇。如果您返回一个值,then()
则使用该值调用next 。但是,如果您返回类似 promise 的内容,则 nextthen()
会等待它,并且仅在该 promise 解决(成功/失败)时调用。
要使用Promise,您必须调用一个创建Promise的函数,或者您必须自己创建一个。你并没有真正描述你真正想要解决的问题,但这里是你自己创建Promise的方法:
function justTesting(input) {
return new Promise(function(resolve, reject) {
// some async operation here
setTimeout(function() {
// resolve the promise with some value
resolve(input + 10);
}, 500);
});
}
justTesting(29).then(function(val) {
// you access the value from the promise here
log(val);
});
// display output in snippet
function log(x) {
document.write(x);
}
或者,如果您已经有一个返回Promise的函数,您可以使用该函数并返回其Promise:
// function that returns a promise
function delay(t) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, t);
});
}
function justTesting(input) {
return delay(100).then(function() {
return input + 10;
});
}
justTesting(29).then(function(val) {
// you access the value from the promise here
log(val);
});
// display output in snippet
function log(x) {
document.write(x);
}
我在这里所做的是我从 justTesting 函数返回了一个Promise。然后,您可以在解析函数时获得结果。
// new answer
function justTesting() {
return new Promise((resolve, reject) => {
if (true) {
return resolve("testing");
} else {
return reject("promise failed");
}
});
}
justTesting()
.then(res => {
let test = res;
// do something with the output :)
})
.catch(err => {
console.log(err);
});
希望这可以帮助!
// old answer
function justTesting() {
return promise.then(function(output) {
return output + 1;
});
}
justTesting().then((res) => {
var test = res;
// do something with the output :)
}
我更喜欢使用“await”命令和异步函数来摆脱Promise的混乱,
在这种情况下,我将首先编写一个异步函数,这将用于代替在此问题的“promise.then”部分下调用的匿名函数:
async function SubFunction(output){
// Call to database , returns a promise, like an Ajax call etc :
const response = await axios.get( GetApiHost() + '/api/some_endpoint')
// Return :
return response;
}
然后我会从主函数调用这个函数:
async function justTesting() {
const lv_result = await SubFunction(output);
return lv_result + 1;
}
请注意,我在这里将主函数和子函数都返回给了异步函数。
Promises
不要“返回”值,它们会将它们传递给回调(您通过 .then() 提供)。
它可能是想说你应该resolve(someObject);
在 promise 实现中做。
然后在你的then
代码中你可以参考someObject
做你想做的事。