5 ms·
No, it was not given a Promise. It was given a foreign object from another window. If you want to inspect another window you should not be reusing code that is
by stagas 7y ago
No, it was not given a Promise. It was given a foreign object from another window. If you want to inspect another window you should not be reusing code that is designed for single threaded operations. Instead, have a layer that translates, serializes, or explicitly defines an interface that the objects we are dealing with are foreign and need to be transformed. Then the abstraction implementation details of dealing with multiple windows become a concern of a single layer and not your entire codebase. Implicitly and magically treating a foreign window as this window, will fail in many subtle and unknown ways. The "brokenness" you mention is not in that implementation, it is correctly breaking, telling you that what you are doing is wrong, then you try to bypass the error instead of fixing your approach.
- foepys 7y agoGP's comment screams XY problem which seem to be increasingly common these days.
- exogen 7y agoIf you think pointing out a bug due to an edge case someone didn't think of is the XY problem, I'm afraid you don't know what the XY problem is.
- foepys 7y agoThe problem was to get the promise out of the iframe when you shouldn't do this directly in the first place. This literally is an XY problem: "I need to do A but it's giving me bad results, what do I need to add?" - "Don't use A, it's bad practice. Use B instead and keep using built-in tools instead of hacking something together" In this case use instanceof instead of is-promise because it's a hack around the actual problem of getting objects out of a different context that was explicitly designed to behave this way. I'm afraid that you don't know what an XY problem is. JavaScript developers always seem to think they are the smart ones after their 6 weeks of some random bootcamp and then you end up with some crap like NPM where a single line in a package out of hundreds maintained by amateurs can break everybody's development environment.
- exogen 7y ago> when you shouldn't do this directly in the first place. There's absolutely nothing wrong with accessing the content of a same-origin iframe. I am sorry that you cannot admit to being wrong. > after their 6 weeks of some random bootcamp I have a Computer Science degree and 20 years of web development experience, long before npm existed. So fuck off.
- exogen 7y agoFor foreign-origin iframes, that's exactly what people do using `postMessage`. But for same-origin iframes there's no need since you can access the iframe's context directly. So people can (and do) write code exactly like this that accesses data directly. And it was given a Promise. You just shouldn't use instanceof in multi-window contexts in JavaScript. This is why built-ins like `Array.isArray` exist and should be used instead of `arr instanceof Array`. Maybe you'd prefer to write to TC39 and tell them that `Array.isArray` is wrong and should return false for arrays from other contexts? There's no use jumping through hoops to avoid admitting that OP made an error. They were wrong and didn't think of this.