Discover similar items within an array by utilizing async/await and promise.all

The value of filterdList.length always equals the total number of elements with the code provided below. As a result, this method consistently returns false because there is only one item in the table that matches the given name.

async itemExists(name) : Promise<boolean>{
const itemList = await element.all(this.itemList)
const filteredList= await Promise.all(itemList.filter( async (item) =>{
  let text = await item.getText();
  if (text == name) {
    return true;
  }
}));

 return await filteredList.length == 1;
}

This method can be called as shown below:

console.log(await itemExists('unique item name'));

Answer №1

await is only needed once in an async function

async function checkItemExists(name) {
  const itemsList = await Promise.all(element.all(this.itemsList)
                   .map(item => item.getText()));
  const filteredList = itemsList.filter(item => text === name);
  return filteredList.length == 1;
}

checkItemExists(name).then(bool => console.log(bool));

async function checkItemExists(name) {
  const itemList = await Promise.all(['unique item name', 'not unique item name'].map(item => Promise.resolve(item)))
  const filterdList = itemList.filter(item => item == name);
  return filterdList.length === 1;
}

checkItemExists('unique item name').then(bool => console.log(bool));

Answer №2

This particular code snippet is definitely incorrect:

return await filterdList.length == 1;

It seems like the intention here is to return a Promise instead of a boolean value. Remove the unnecessary use of the await keyword in this context if you are aiming for that outcome. Additionally, it's not possible to directly await a boolean variable; await can only be used with Promise instances. Instead, try assigning the awaited result to a variable like var list = await filterdList, and then check its length later.

I suggest starting over by rebuilding this method step by step while debugging using console.log statements. This approach will help in identifying the issues more clearly. Pay attention to what you are passing to Promise.all, as it should consist of an array of Promises for correct functionality.

Consider delaying the array filtering until all the Promises have been resolved. First, retrieve all item names using

Promise.all(itemList.map(item => item.getName()))
to get the resolved item names before applying any filters.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Is there a way to prevent tags from wrapping and showcase them all in a single line when utilizing the jQuery select2 plugin?

I have a requirement to prevent tags from wrapping and instead display them in a single line using the jQuery TagIt plugin. Check out my preview: https://i.stack.imgur.com/lYhsi.png My goal is to have all the tags displayed on a single line without wra ...

Extract latitude and longitude coordinates from a dataset by applying a rectangular filter

I have developed a program that extracts information from a JSON object and showcases it on a webpage, specifically focusing on Public Bike Stations. The JSON object includes the latitude and longitude of each station, making it easy to locate them. My cu ...

Store a value in a data container

I am completely new to working with node.js and while I have a basic understanding of its functionality, I believe there is something crucial that I am missing when it comes to how fs.write and buffers work. My goal is to send a user-defined variable over ...

Switching the phone formatting from JavaScript to TypeScript

Below is the JavaScript code that I am attempting to convert to TypeScript: /** * @param {string} value The value to be formatted into a phone number * @returns {string} */ export const formatPhoneString = (value) => { const areaCode = value.substr(0 ...

Accessing values from a JSON object in AngularJS without using a loop based on another field

Is there a way to extract the "value" associated with the "name" in JSON using Angular JS without having to iterate through the array? For instance, if I have an array like the one below with name and value fields, how can I retrieve the value "ABC" based ...

Using Nest JS to Handle Null Responses in Services

When using Nest Js to call Axios and get data from the Facebook API, I encountered a problem where the service was returning a null value. Strangely, when I tried calling the response using console.log, it did return a value. Any suggestions on what I migh ...

How to access webpack's require.context feature on the development server

In my webpack development configuration, I have set up a mocked backend using Express. Following an example from the DevServer Docs, my setup looks something like this: module.exports = { // ... devServer: { setupMiddlewares: (middlewares, devServe ...

Finding Nested Key Paths in TypeScript for Objects and Arrays

I am in search of a unique method to create a TypeScript type that can take an object type and retrieve all the nested key paths, including properties within arrays as well. I want to exclude any default array properties such as "push" or "pop." While I ha ...

Optimizing AngularJS ui-router to maintain state in the background

Currently working on an AngularJS project that involves a state loading a view containing a flash object. I am looking for a way to ensure that the flash object remains loaded in the background during state changes, preventing it from having to reload ev ...

Leveraging the power of fullpage.js to activate Velocity.js/Blast.js animations

Referencing a solution shared on this forum: Velocity.js/Blast.js starting opacity at 0 I am currently working with Velocity.js and Blast.js to implement a basic word-by-word loading animation, commonly used. This setup also involves Cycle2. Additionally, ...

Discovering the identity of an item

Assume I have some JavaScript code like this: Foo = { alpha: { Name: "Alpha", Description: "Ipso Lorem" }, bravo: { Name: "Bravo", Description: "Nanu, Nanu" }, delta: { Name: "Fly with me", Desc ...

Tips for limiting the .click function to only the initial image in order to prevent loading all images within the container

I am facing a situation where multiple images are being returned into a specific div, which is working as intended. <div class="go" id="container"></div> Upon clicking on an image, it is loaded into a modal popup. However, instead of capturin ...

Updating form in react requires a double click

I'm facing an issue with the popup form in my note-taking project. The popup form displays when a user wants to edit a note, and it should already contain the contents of the selected note. While the form shows the correct contents, I've noticed ...

What is the best way to integrate new entries into the data source of a Kendo UI grid?

After successfully creating a kendo.data.dataSource, I managed to bind it to the KendoUI Grid on my page. However, when attempting dataSource.insert(0, [a : "b"]);, it surprisingly removes the existing data. The code snippet that illustrates this issue i ...

What is the best method for compressing and decompressing JSON data using PHP?

Just to clarify, I am not attempting to compress in PHP but rather on the client side, and then decompress in PHP. My goal is to compress a JSON array that includes 5 base64 images and some text before sending it to my PHP API. I have experimented with l ...

Unable to serve static files when using NextJs in conjunction with Storybook

The documentation for Next.js (found here) suggests placing image file paths under the public directory. I have a component that successfully displays an image in my Next.js project, but it doesn't render properly within Storybook. The image file is ...

Ensuring the accuracy of paths in VueJS

I am working on creating specific routes for different users to ensure each user has a tailored experience. For example, if a user is logged in as an admin, they should be directed to '/admin' instead of '/home'. Here's what I&apos ...

Ajax updates to an element are not reflected until the for loop has completed

I am looking for a way to print a series of numbers sequentially using AJAX. Here is an example of what I want to achieve: (each new line represents an update of the previous line!) Output is: 1 12 123 1234 12345 123456 ... I ...

The Console.Log function will not run if it is placed within the RXJS Tap operator

In my current setup, I have the following observables: this.authenticationService.isSignedIn() -> Observable<Boolean> this.user$ -> Observable<UserModel> I am in need of checking a condition based on both these observables, so I attempt ...

The Ionic tab is already finished displaying even before the data has completed loading

Creating a favorites section for a vouchers app has proven to be slightly challenging. When attempting to retrieve the current user's favorite vouchers and display them using ngFor in the HTML, I encountered an issue. The very first time I open the fa ...