在if语句中承诺(JavaScript)

时间:2018-10-15 22:11:01

标签: javascript asynchronous promise

我想在if语句中使用promise结果,但是当我尝试这样做时,却得到了这样的东西:

const promise = new Promise((resolve, reject) => {
setTimeout(() => {
  resolve(5 * 2)
}, 1000)
})

console.log(promise.then(i => i) === 10) //false

在这种情况下,是否有可能以某种方式等待承诺结果的提取?

3 个答案:

答案 0 :(得分:0)

您需要处理Promisethen的结果。

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形式)来提供行为。因此,需要处理的所有操作都必须在回调中。

详细了解Promisethen

答案 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);
})();