2016-09-28 4 views
-1

나는 APP 반응에 ES6 약속 테스트,하지만 난 내 그 때는에 발생하지했습니다약속은 다음으로 결과/캐치

function addItem (value) { 
    return new Promise((resolve, reject) => { 
    document.getElementById('todo').innerHTML += `<li>${value}</li>`; 
    }); 
} 

addItem(value).then(() => { 
    alert('then !'); 
}).catch((err) => { 
    console.log(err) 
}) 

내 기능이 실행됩니다,하지만 난 내 다음에 행사하지했습니다.

어디에서 내가 틀렸는 지 아십니까? 고맙습니다 ! :)

+1

'addItem' 함수는 비동기 적이 지 않으므로 아마도'Promise'를 리턴하지 않아야합니다. 이후에'then' 호출을 연결할 수 있으려면'Promise.resolve (addItem (value))., (...)'로 시작하면됩니다. – saadq

답변

0

귀하의 약속을 거부하거나 해결해야합니다.

function addItem (value) { 
    return new Promise((resolve, reject) => { 
    document.getElementById('todo').innerHTML += `<li>${value}</li>`; 
    resolve(); 
    }); 
} 
+0

고마워요! 나는 이것을 추가했다 :'resolve (document.getElementById ('todo'). innerHTML + ='

  • $ {value}
  • ');'올바른지 아니면 후에 resolve()를 추가해야합니까? –

    +0

    그것도 잘 작동합니다. –

    0

    당신은 예를 들어, 약속을 해결해야합니다

    function addItem (value) { 
        return new Promise((resolve, reject) => { 
        document.getElementById('todo').innerHTML += `<li>${value}</li>`; 
        resolve(10); 
        }); 
    } 
    
    addItem(value).then((data) => { 
        alert('then !'); 
        console.log(data);// 10 
    }).catch((err) => { 
        console.log(err) 
    }) 
    
    1

    약속 비동기 작업에 사용된다. 동기 코드를 실행하는 데 사용할 점은 없습니다. 예를 들어, then()은 약속을 해결할 수 없기 때문에 작동하지 않습니다. 문제를 해결하려면 resolve()으로 전화해야합니다.

    +0

    사실이 아닙니다. 비동기 API를 공개하려는 경우 동기 작업에 대한 약속을 사용할 수 있습니다. 그렇게하면 나중에 비동기 구현으로 전환 할 수 있습니다. –

    +1

    @JakubHampl 그렇습니다.하지만 드문 유스 케이스이며 Promise에서 전체 코드를 래핑하는 대신 단순히 Promise.resolve()를 반환하는 것이 좋습니다. –

    0

    Promise에서 resolvereject 기능을 잊어 버렸습니다.

    resolve은 작업을 완료했을 때 호출하는 기능입니다.

    resolve(); 
    

    당신이 resolve()에 전달하는 인수는 다시 then 기능에서 무엇을 얻을 수 있습니다.

    reject은 작업에 오류가있을 때 전화하는 기능입니다. 당신이 거부 할 것이 없다면, 그냥 버려도됩니다. 그러면 전화하지 않아도됩니다.

    reject(); 
    

    당신이 reject()에 전달하는 인수는 다시 catch 기능에서 무엇을 얻을 수 있습니다.