【问题标题】:Is there a way to pass value to array Object using Promise in Node Js?有没有办法在 Node Js 中使用 Promise 将值传递给数组对象?
【发布时间】:2021-05-19 16:19:27
【问题描述】:

我正在使用带有 Shopify API 的 express Js 来获取产品并将其保存到数组中。但是,当我获取所有数据时,我检查列表大小并返回 0。我在获取数据时一直在打印产品详细信息,没有问题。谁能告诉我发生了什么?我该如何解决这个问题? 这是我的代码:

const fetch = require("node-fetch");
const Product = require("./Product");
const client = Client.buildClient(
  {
    domain: "storename.myshopify.com",
    storefrontAccessToken: "token",
  },
  fetch
);
const ProductList = class {
  getProductList() {
    var productList = [];
    client.product.fetchAll().then((products) => {
      products.forEach((product) => {
        const p = new Product(
          product.availableForSale,
          product.createdAt,
          product.description,
          product.id,
          product.images,
          product.options,
          product.productType,
          product.publishedAt,
          product.title,
          product.variants
        );
        p.printProduct();
        productList.push(p);
      });
    });
    console.log("size:" + productList.length);
    return productList;
  }
};

module.exports = ProductList; ```  

【问题讨论】:

    标签: javascript express shopify


    【解决方案1】:

    问题在于您的 fetch 和 .then 处理程序正在运行 asynchronously--所以它们在您有 console.log-ed 输出和 returned 之后执行。你有两个选择:

    1. 你可以returnPromiseresolve得到结果:

      const fetch = require("node-fetch");
      const Product = require("./Product");
      const client = Client.buildClient({
          domain: "storename.myshopify.com",
          storefrontAccessToken: "token",
        },
        fetch
      );
      const ProductList = class {
        getProductList() {
          return new Promise((resolve, reject) => {
            var productList = [];
            client.product.fetchAll().then((products) => {
              products.forEach((product) => {
                const p = new Product(
                  product.availableForSale,
                  product.createdAt,
                  product.description,
                  product.id,
                  product.images,
                  product.options,
                  product.productType,
                  product.publishedAt,
                  product.title,
                  product.variants
                );
                p.printProduct();
                productList.push(p);
              });
              console.log("size:" + productList.length);
              resolve(productList);
            });
          }
        }
      };
      
      module.exports = ProductList;
      
    2. 或者你可以使用async...await来达到同样的效果:

      const fetch = require("node-fetch");
      const Product = require("./Product");
      const client = Client.buildClient({
          domain: "storename.myshopify.com",
          storefrontAccessToken: "token",
        },
        fetch
      );
      const ProductList = class {
        async getProductList() {
          var productList = [];
          const products = await client.product.fetchAll();
          products.forEach((product) => {
            const p = new Product(
              product.availableForSale,
              product.createdAt,
              product.description,
              product.id,
              product.images,
              product.options,
              product.productType,
              product.publishedAt,
              product.title,
              product.variants
            );
            p.printProduct();
            productList.push(p);
          });
          console.log("size:" + productList.length);
          return productList;
        }
      };
      
      module.exports = ProductList;
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多