node.js 中的并行回调宇宙?

Parallel callback universe in node.js?

我正在尝试在节点中实现 shopify api 并希望同步调用 post 请求,因为我想在 posting 之后检索产品 ID 并将其存储在数组。我正在使用一个名为 deasync 的库作为同步等待循环。该脚本以前可以工作,但突然停止工作。 当我在没有 deasync 循环的情况下记录我的调用时,我看到响应是从 shopify 返回的,但是,当我 运行 我的脚本带​​有 deasync 循环时,我的标识符保持为 null,并且 deasync 循环不断迭代。我对 node.js 中的异步请求比较陌生。我的标识符变量的范围似乎是正确的。我现在唯一能想象的是,回调发生在一个与我的 while 循环分开的并行 node.js 宇宙中。非常感谢任何帮助,谢谢!

function postProduct(Store, product, variants) {

  var identifier = null;

  var post_data = {
    "product": product
  };


  Shopify.post('/admin/products.json', post_data, function(err, data, headers) {

    identifier = {
      id: data.product.id,
      price: data.product.price,
      variants: variants
    };

  });

  while(identifier === null) {
    require('deasync').runLoopOnce();
  }

  return identifier;
}

所有这些 deasync 解决方案都无法稳定,因为它们依赖于内部引擎实现。

只是尝试学习异步方式。这真的很简单。

原生的简化示例 Promise:

var products = [
  {Store: {}, product: {}, variant: {}},
  {Store: {}, product: {}, variant: {}},
];

Promise.all(products.map(postProduct)).then(function(identifiers){
  // use identifiers
});

function postProduct(data) {
  return new Promise(function(ok, fail){
    Shopify.post(...., function(){
       //...
       ok(identifier);
    });

  });
}