【发布时间】:2014-11-20 05:48:27
【问题描述】:
我正在使用 node.js 库 nomnom 进行命令行解析和bluebird 的承诺。
Nomnom 提供通过回调执行commands。不幸的是,回调不支持返回承诺。
我想知道,处理这种接口不匹配的最佳方法是什么? 在这种情况下,我正在考虑添加一个繁忙的循环,直到一个承诺被解决/拒绝(使用 isPending )。 有没有更好的办法?
var parser = require("nomnom");
parser.command('somecommand').callback(function(opts) {
var p = thisFuncReturnsAPromise();
//have to block here since
//nomnom expects at the end of the callback that processing of the command is done.
})
【问题讨论】:
-
只需编写一个匿名 then 方法并使用内部参数调用回调。不要阻止。
-
你会答应的。这是一个很好的问题 - 让我快速找到副本。
-
不确定如何承诺。添加示例代码以使案例更加清晰。
-
我不认为在这种情况下这是重复的,因为 nomnom 需要回调。
-
我认为@Bergi 在这里有关键的洞察力。为了更好地理解“不可能”这个词,我深入研究了 bluebirds 代码和 Node.js 异步处理 API。它不允许通过 process.nextTick 调度的任何函数在另一个函数期间执行。由于 bluebird 通过 process.nextTick 执行解析,因此在不更改 3rd 方库的情况下无法等待这种情况发生。唯一的方法是如果 node.js 提供了类似“process.executeEveryThingThatWasScheduledForNextTickNow()”这样的 API。
标签: javascript node.js promise