resolveStartupNodeHostnames() {
        if (!Array.isArray(this.startupNodes) || this.startupNodes.length === 0) {
            return Promise.reject(new Error("`startupNodes` should contain at least one node."));
        }
        const startupNodes = util_1$1.normalizeNodeOptions(this.startupNodes);
        const hostnames = util_1$1.getUniqueHostnamesFromOptions(startupNodes);
        if (hostnames.length === 0) {
            return Promise.resolve(startupNodes);
        }
        return Promise.all(hostnames.map((this.options.useSRVRecords ? this.resolveSrv : this.dnsLookup).bind(this))).then((configs) => {
            const hostnameToConfig = utils_2.zipMap(hostnames, configs);
            return startupNodes.map((node) => {
                const config = hostnameToConfig.get(node.host);
                if (!config) {
                    return node;
                }
                else if (this.options.useSRVRecords) {
                    return Object.assign({}, node, config);
                }
                else {
                    return Object.assign({}, node, { host: config });
                }
            });
        });
    }
Normalize startup nodes, and resolving hostnames to IPs.

This process happens every time when #connect() is called since
#startupNodes and DNS records may chanage.

@private
@returns {Promise<IRedisOptions[]>}