澄清 node.js + promises 片段

Posted

技术标签:

【中文标题】澄清 node.js + promises 片段【英文标题】:Clarification of node.js + promises snippet 【发布时间】:2016-01-21 11:27:34 【问题描述】:

How do I convert an existing callback API to promises? 接受的答案有这个例子:

function getUserDataAsync(userId)
    return new Promise(function(resolve,reject)
         getUserData(userId,resolve,reject);
    );

问题:

    Promise 的主体不应该返回一些东西,而不仅仅是调用getUserData(至少在实际代码中,而不是作为 promise 演示练习)?

    这个特殊的Promise 也是一个闭包吗?它似乎关闭了userId,因为getUserDataAsync 使用userId 创建并返回了一个新的Promise 实例,但我想确定一下。

【问题讨论】:

1.编号The return value is ignored by the Promise constructor anyway。 2.是的,传递给构造函数的函数表达式形成了一个闭包。 【参考方案1】:

Promise 的主体不应该返回一些东西,而不仅仅是调用getUserData(至少在实际代码中,而不是作为 Promise 演示练习)?

不,没必要。事实上,从Promise 构造函数返回一个值是没有效果的。 只有resolvereject 函数可以实现Promise

这个特殊的Promise 也是一个闭包吗?它似乎关闭了userId,因为getUserDataAsync 使用userId 创建并返回了一个新的Promise 实例,但我想确定一下。

是的,传递给Promise 构造函数的函数关闭了userId

【讨论】:

【参考方案2】:

    不,它不应该返回任何东西,因为在那个时间点没有任何东西可以返回,这就是你使用 Promise 的原因。

    是的。

【讨论】:

以上是关于澄清 node.js + promises 片段的主要内容,如果未能解决你的问题,请参考以下文章

node.js的Promise库-bluebird示例

[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist

JS 异步系列 —— Promise 札记

如何遍历 node.js 中的一系列承诺?

Node.js 中的 Promise 和数组

Node.js插件编写-本地安全线程实现JS Promise