Coffeescript 使用蓝鸟和咖啡脚本的简单承诺示例有一半的时间有效

Coffeescript 使用蓝鸟和咖啡脚本的简单承诺示例有一半的时间有效,coffeescript,promise,Coffeescript,Promise,因此,我基本上是在尝试使用承诺编写一些简单的代码,而我在理解为什么每隔一段时间这个特定的代码都能工作时遇到了一些困难 Promise = require('bluebird') mkdirp = Promise.promisify(require('mkdirp')) rm = Promise.promisify(require('rimraf')) console.log "Preparing build directory" rm('build') .then(mkdirp('buil

因此,我基本上是在尝试使用承诺编写一些简单的代码,而我在理解为什么每隔一段时间这个特定的代码都能工作时遇到了一些困难

Promise = require('bluebird')
mkdirp = Promise.promisify(require('mkdirp'))
rm = Promise.promisify(require('rimraf'))

console.log "Preparing build directory"
rm('build')
  .then(mkdirp('build'))
这将成功完成第一次运行,但第二次将失败,依此类推

以下是步骤:

┌[adam@bigboi] [/dev/pts/5] [master ⚡] 
└[~/Projects/bummyjab]> time coffee index.coffee ~/Dropbox/Articles/*.md
Preparing build directory
coffee index.coffee ~/Dropbox/Articles/*.md  0.25s user 0.02s system 100% cpu 0.267 total
┌[adam@bigboi] [/dev/pts/5] [master ⚡] 
└[~/Projects/bummyjab]> stat build
  File: ‘build’
  Size: 4096       Blocks: 8          IO Block: 4096   directory
Device: 804h/2052d Inode: 17172395    Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/    adam)   Gid: ( 1000/    adam)
Access: 2015-06-25 22:07:49.061331341 -0400
Modify: 2015-06-25 22:07:49.061331341 -0400
Change: 2015-06-25 22:07:49.061331341 -0400
 Birth: -
┌[adam@bigboi] [/dev/pts/5] [master ⚡] 
└[~/Projects/bummyjab]> time coffee index.coffee ~/Dropbox/Articles/*.md
Preparing build directory
Unhandled rejection Error: EEXIST: file already exists, mkdir '/home/adam/Projects/bummyjab/build'
  at Error (native)

coffee index.coffee ~/Dropbox/Articles/*.md  0.20s user 0.03s system 100% cpu 0.235 total
不幸的是,我的谷歌技能还没有找到发生这种情况的原因


谢谢

如果您试图控制顺序,使
mkdirp('build')
仅在
rm('build')
完成后发生,则需要将函数引用传递给
。然后()
如下所示:

rm('build').then(function () {
    return mkdirp('build');
});
或者,您可以使用
.bind()


您所做的是立即执行
mkdirp()
,并将返回值传递给
。然后()
,它不会等到承诺解决后再执行。

签出<代码>。然后需要一个函数。相反,您将立即调用函数,并将其返回值传递给
。然后
@jfriend00在下面向您展示了正确的方法。请注意,在Bluebird 3.0中,promise库将自己告诉您错误所在:)
rm('build').then(mkdirp.bind(null, 'build'));