Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can you assist me in satisfying promises aplus spec 2.2.4 in NodeJS? #78

Open
danday74 opened this issue Nov 10, 2015 · 2 comments
Open

Comments

@danday74
Copy link

I am writing an HTTP Promises package for nodeJS. I need it to be promises aplus compliant. I am using promises-aplus-tests - https://www.npmjs.com/package/promises-aplus-tests

I have created an adapter as follows ..

var adapter = {
    deferred: function() {
        var d = {}
        d.promise = new HTTPromise(new GETOptions('/path', DEFAULT_OPTIONS));
        d.resolve = executorResponseFunc;
        d.reject = executorRejectFunc;        
        return d;
    }
}

promisesAplusTests(adapter, function (err) {
    done(err);
});

My tests are failin on https://promisesaplus.com/#point-34 ... with further help on https://promisesaplus.com/#point-67

2.2.4 onFulfilled or onRejected must not be called until the execution context stack contains only platform code

3.1 Here “platform code” means engine, environment, and promise implementation code. In practice, this requirement ensures that onFulfilled and onRejected execute asynchronously, after the event loop turn in which then is called, and with a fresh stack. This can be implemented with either a “macro-task” mechanism such as setTimeout or setImmediate, or with a “micro-task” mechanism such as MutationObserver or process.nextTick. Since the promise implementation is considered platform code, it may itself contain a task-scheduling queue or “trampoline” in which the handlers are called.

But I can't get it passing this promises aplus test. I am using the bog standard JavaScript Promises library (which on its own passes the tests) documented at ...

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

new Promise(executor);

new Promise(function(resolve, reject) { ... });

In the executor I have tried ...

if (response.statusCode === 200) {
    process.nextTick(() => {
        resolve(finalResponse);   
    });
} else {
    process.nextTick(() => {
        reject(finalResponse);
    });
}

and also ...

process.nextTick(() => {
    if (response.statusCode === 200) {
        resolve(finalResponse);      
    } else {
         reject(finalResponse);
    }
});

There seems to be a lot of talk on the Internet but not many code examples of how to comply. Can anyone provide a code sample please on how to satisfy this test and how you would use nextTick or another suitable solution?

Worthing mentioning I have another call to reject within an HTTP error handler within the executor function;

Many thanks

@stefanpenner
Copy link

I am writing an HTTP Promises package for nodeJS

Just curious, have you considered using an existing promise library for your promise based HTTP lib?

@danday74
Copy link
Author

thanks yes - my thinking was wrong - sorry to cause any problems :)
my problem was solved described here :)

http://stackoverflow.com/questions/33629004/can-you-assist-me-in-satisfying-promises-aplus-spec-2-2-4-in-nodejs

On Tue, Nov 10, 2015 at 4:13 PM, Stefan Penner [email protected]
wrote:

I am writing an HTTP Promises package for nodeJS

Just curious, have you considered using an existing promise library for
your promise based HTTP lib?


Reply to this email directly or view it on GitHub
#78 (comment)
.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants