I see that I can use `protractor.promise.all()`. Is there a `protractor.promise.when()`? And where can I find out more about it and how to use it?

My problem is I need to resolve all `getText()` promises, determine which ones fail and provide blanks for those that failed.

For example:

```
function getValues() {
    let pFirstName = $('#firstname').getText();
    let pLastName = $('#lastname').getText();
    let pSSN = $('#ssn').getText();
    return protractor.promise.when([pFirstName, pLastName, pSSN])
        .then(function(values) {
            return {
                "first": values[0],
                "last": values[1],
                "ssn": values[2]    // This value may or may not be on the DOM, how do I check it and provide an alternate value?
            };
        });
}

```

**UPDATE:**  

As I'm continuing my research, I see this is more of a webdriver issue. And, perhaps I need to pull in Bluebird. I'm not sure.

To answer the question below, "what do you mean by which ones fail?"
Suppose that the `$('#ssn')` ElementFinder doesn't actually find an element that matches `#ssn`. The `getText()` method would reject on the promise and deliver an element not found error. And, so, I would the following two situations:

```
<span id="firstname">Joe</span>
<span id="lastname">Smith</span>
<span id="ssn">123-45-6789</span>

```

---

```
getValues().then(res => console.log(res));

```

would return `{"first": "Joe","last":"Smith","ssn":"123-45-6789"}`

In the following situation, where a user is not supposed to see the SSN, and angular doesn't even create the element, we may have: 

```
<span id="firstname">Joe</span>
<span id="lastname">Smith</span>

```

---

```
getValues().then(res => console.log());

```

I would expect that the return should be: `{"first":"Joe","last":"Smith"}` or `{"first":"Joe","last":"Smith","ssn":""}`