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

fix(Symbol.iterator): correctly handle case where Symbol constructor itself is not defined #3394

Merged
merged 1 commit into from
Mar 8, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions src/internal/symbol/iterator.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
export function getSymbolIterator(): symbol {
/* NOTE: Warning users that they don't have a Symbol.iterator
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So we should probably just remove the console.warn (and related comment) and document it in the migration docs. Because it's going to prompt users to add polyfills they don't need, or even to come file issues that they're getting warnings they don't understand.

polyfill. We don't want to throw on this, because it's not required
by the library. However it will provide clues to users on older
browsers why things like `from(iterable)` doesn't work. */
if (typeof Symbol !== 'function' || !Symbol.iterator) {
console.warn('RxJS: Symbol.iterator does not exist, so things like from(iterable) won\'t work');
return '@@iterator' as any;
}

/* NOTE: Warning users that they don't have a Symbol.iterator
polyfill. We don't want to throw on this, because it's not required
by the library. However it will provide clues to users on older
browsers why things like `from(iterable)` doesn't work. */
if (!Symbol || !Symbol.iterator) {
console.warn('RxJS: Symbol.observable does not exist');
Copy link
Member Author

@jayphelps jayphelps Mar 7, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/observable/iterator too. I missed this before 🙂

return Symbol.iterator;
}

/** The native Symbol.iterator instance or a string */
export const iterator = Symbol && Symbol.iterator || '@@iterator';
export const iterator = getSymbolIterator();

/**
* @deprecated use {@link iterator} instead
Expand Down