我想在if语句中使用promise结果,但是当我尝试这样做时,却得到了这样的东西:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(5 * 2)
}, 1000)
})
console.log(promise.then(i => i) === 10) //false
在这种情况下,是否有可能以某种方式等待承诺结果的提取?
答案 0 :(得分:0)
您需要处理Promise
中then
的结果。
console.log(promise.then(i => i === 10))
这将仍然记录promise对象。如果要记录结果:
promise.then(i => console.log(i === 10))
为更清楚起见,请参见带有更多语法提示的lambda:
promise.then( (i) => { console.log(i === 10); } );
或者甚至作为匿名函数:
promise.then( function(i){ console.log(i === 10); } );
您在此处预先准备行为,然后将其通过:
var myTimeoutHandler = function(i){
console.log(i === 10);
};
promise.then(myTimeoutHandler);
i => ...
语法是此的简写。
通常,使用Promise
(和ReactiveX的Observable
一样),您正在做出反应,因此您通过传递回调(此处为lambda形式)来提供行为。因此,需要处理的所有操作都必须在回调中。
答案 1 :(得分:0)
您只能在传递给then
的函数中使用Promise的值–
const delay = x =>
new Promise (r => setTimeout (r, 1000, x))
delay (5*2) .then (console.log)
// 10
delay (5*2) .then (x => x === 10) .then (console.log)
// true
或在async
函数中使用关键字await
–
const delay = x =>
new Promise (r => setTimeout (r, 1000, x))
const main = async () =>
{ const x = await delay (5*2)
console.log (x)
console.log (x === 10)
return 'done'
}
main () .then (console.log)
// 10
// true
// done
答案 2 :(得分:0)
您可以使用Async/Await以更同步的方式使用它。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(5 * 2)
}, 1000)
});
(async () => {
console.log(await promise === 10);
})();