CoderWil Ответов: 1

Как мне получить правильный ответ?


Привет, я новичок в JavaScript promise и async. У меня есть проблема, чтобы получить правильное значение из "TrueOrFalsefn()" показать ниже,

// Objective: to return True/False from this function 
// 
function TrueOrFalsefn(){    
    var output = null;      
    //1. Create a new function that returns a promise
    if (secondFunction()== true)
	{
		alert("Yes"); 
		return true;  // <<--- 
	}
	else if (secondFunction()== false)
	{
		alert("No");
		return false;    
	}
     
	//2. Create an async function
    async function secondFunction() { 
        let result2 = await firstFunction()
		 if (result2==101 )
		 {
			 output = true;  
		 }
		 else{
			output = false;
		 }
         return output;
    }; 

	function firstFunction() {
      return new Promise((resolve, reject) => {
          let y = 100
          setTimeout(() => {           
             resolve(y+1)
          }, 2000)
      })
    }
}


Что я уже пробовал:

При отладке в браузере результат всегда "нулевой", но я ожидаю взамен "истинный".

Может ли кто-нибудь посоветовать, как мне сделать это правильно?
Заранее спасибо
Уилсон

1 Ответов

Рейтинг:
12

Richard Deeming

Результат Ан async функция будет Promise Вам либо нужно это сделать, либо нет. await это, или используйте Продолжение, Чтобы прочитать результат.

Вы также должны избегать вызова функции дважды. Вызовите его один раз и сохраните результат в переменной.

async function TrueOrFalsFn(){
    function firstFunction(){
        return new Promise((resolve, reject) => {
            let y = 100
            setTimeout(() => resolve(y + 1), 2000)
        });
    }
    
    async function secondFunction(){
        let result2 = await firstFunction();
        return result2 === 101;
    }
    
    let output = await secondFunction();
    if (output) {
        alert("Yes");
    }
    else {
        alert("No");
    }
    
    return output;
}
NB: Вызывающий код также должен будет await результат этой функции или используйте продолжение для чтения результата.


CoderWil

Большое тебе спасибо, Ричард. Это здорово, я правильно понял, используя ваш подход.