解决Node.js承诺的最佳方法是什么?

回购人

我尝试用Promise Asynchronous调用用NAN(Node.js的本地抽象)实现的本地C ++函数。不幸的是,承诺从未解决。我的Java代码。

function callbackDoAsyncStuffFirst() {
  return new Promise(function (resolve, reject) {
    module.doAsyncStuffFirst(function (error, a, v, b) {
      if (error) {
        return reject(error);
      }
      console.log("Resolve First: ", a, " ", b, " ", v, " ");
      let ret = [a, b, v];
      console.log("Return frist Resolve");
      return resolve(ret);
    });
  });
}

function callbackDoAsyncStuff() {
  return new Promise(function (resolve, reject) {
    module.doAsyncStuffSecond(function (error, a, b) {
      if (error) {
        return reject(error);
      }
      console.log("Returned: ", a, " ", b);
      let ret = [a, b];
      console.log("Call Second Resolve");
      return resolve(ret);
    }, 'valueA', 'valueB');
  });
}

let p = callbackDoAsyncStuffFirst().then((retArray) => { console.log("resolve first-->", retArray) });

let second = callbackDoAsyncStuff().then((retArray) => { console.log("resolve second-->: ", retArray) });

控制台输出看起来像

C++: Start Execute
C++: HandleOKCallback
JS: Resolve First:  a, b, v
JS: Return frist Resolve

在此之后,不再发生任何事情。

威克

这个伪造的模块演示问题出在您的C ++插件中,而不是您的JavaScript中,该插件在这里可以正常工作。

它还演示了如何使用一组“成功的”参数调用回调,因为您将第一个回调参数解释为错误,该参数必须为false才能使您不拒绝诺言。

var module = {
  doAsyncStuffFirst: (cb) => {
    cb(undefined, 'dummy_a1', 'dummy_v1', 'dummy_b1');
  },
  doAsyncStuffSecond: (cb) => {
    cb(undefined, 'dummy_a2', 'dummy_b2');
  }
}

function callbackDoAsyncStuffFirst() {
  return new Promise(function (resolve, reject) {
    module.doAsyncStuffFirst(function (error, a, v, b) {
      if (error) {
        return reject(error);
      }
      console.log("Resolve First: ", a, " ", b, " ", v, " ");
      let ret = [a, b, v];
      console.log("Return frist Resolve");
      return resolve(ret);
    });
  });
}

function callbackDoAsyncStuff() {
  return new Promise(function (resolve, reject) {
    module.doAsyncStuffSecond(function (error, a, b) {
      if (error) {
        return reject(error);
      }
      console.log("Returned: ", a, " ", b);
      let ret = [a, b];
      console.log("Call Second Resolve");
      return resolve(ret);
    }, 'valueA', 'valueB');
  });
}

let p = callbackDoAsyncStuffFirst().then((retArray) => { console.log("resolve first-->", retArray) });

let second = callbackDoAsyncStuff().then((retArray) => { console.log("resolve second-->: ", retArray) });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Node.js中使用Akka的最佳方法是什么

解决异步任务的最佳方法是什么?

解决此递归的最佳方法是什么?

在node.js中使用async / await处理承诺拒绝的正确方法是什么?

承诺链无法解决;正确的修复方法是什么?

承诺设置超时最佳实践中解决的“功能”是什么?

在Alpine Linux上使用NPM安装最新的Node.js的最佳方法是什么

从node.js和Typescript中的动态文件名加载JSON的最佳方法是什么?

从Node.js中的URL检索JSON的最佳方法是什么

在node.js中使用fs覆盖文件的最佳方法是什么

在Windows上托管node.js应用程序的最佳方法是什么?

在node.js中执行“多线程”的最佳和有效方法是什么?

在 node.js 中使用 oauth 进行嵌套 API 调用的最佳方法是什么?

代码审查:解决此 Java 程序的最佳方法是什么?

解决terraform中的EntityAlreadyExists错误的最佳方法是什么?

解决Java项目之间的依赖关系的最佳方法是什么?

解决意外的顶级水平的最佳方法是什么?

使用parent :: find解决此错误的最佳方法是什么?

解决“如果发生地狱”的最佳方法是什么?

解决 .swm 文件中合并冲突的最佳方法是什么?

解决此glibc问题的最佳方法是什么?

Node.js读写Excel文件的最佳实践是什么?

在Node.js中嵌套promise时承诺解决/拒绝

无法解决Node.js中的承诺链错误

node.js解决承诺并返回值

无法解决承诺并更新Node.js App中的数据

Node.js - 承诺不在循环内解决

Node.js:在resolve()调用之前解决的承诺?

在 Mac 上安装 Node 和 npm 的最佳方法是什么?