Search code examples
javascriptwindows-store-appswinjs

Any way to convert WinJS.Promise into normal promises?


I'm making windows store apps on Visual Studio 2017 and I notice that by default there is no new Promise(), there is only WinJS.Promise, which differs from the standard promises in some ways (eg it doesn't have a .catch, instead of Promise.all it has Promise.join, and so on).

I was wondering if there's an easy way to convert WinJS promises into normal promises.


Solution

  • I was wondering if there's an easy way to convert WinJS promises into normal promises.

    I have tested normal promise in the UWP, it works in my side.

    function testPromise() {
        let thisPromiseCount = ++promiseCount;
    
        let log = document.getElementById('log');
        log.insertAdjacentHTML('beforeend', thisPromiseCount +
            ') Started (<small>Sync code started</small>)<br/>');
    
        // We make a new promise: we promise a numeric count of this promise, starting from 1 (after waiting 3s)
        let p1 = new Promise(
            // The resolver function is called with the ability to resolve or
            // reject the promise
            (resolve, reject) => {
    
                log.insertAdjacentHTML('beforeend', thisPromiseCount +
                    ') Promise started (<small>Async code started</small>)<br/>');
                // This is only an example to create asynchronism
                window.setTimeout(
                    function () {
                        // We fulfill the promise !
                        resolve(thisPromiseCount);
                    }, Math.random() * 2000 + 1000);
            }
        );
    
        // We define what to do when the promise is resolved with the then() call,
        // and what to do when the promise is rejected with the catch() call
        p1.then(
            // Log the fulfillment value
            function (val) {
                log.insertAdjacentHTML('beforeend', val +
                    ') Promise fulfilled (<small>Async code terminated</small>)<br/>');
            })
            .catch(
            // Log the rejection reason
            (reason) => {
                console.log('Handle rejected promise (' + reason + ') here.');
            });
    
        log.insertAdjacentHTML('beforeend', thisPromiseCount +
            ') Promise made (<small>Sync code terminated</small>)<br/>');
    }
    

    I'm making windows store apps on Visual Studio 2017 and I notice that by default there is no new Promise(), there is only WinJS.Promise.

    I suppose that you have referenced WinJS Libary cause the normal promise was covered. However,in theory, even if you reference WinJS Libary, it will not affect the normal promise. Please try to run in your environment. And let me know the result.