2015-04-29 67 views
0

有人可以解释我为什么这个鸵鸟政策工作:辅助外变量的一个的NodeJS承诺中

var outsideVar = 15; 
myFunc.doSomething().then(function() { 
    console.log("outsideVar: " + outsideVar); 
}).fail(function(err) { 
    console.log("error: ", err); 
}); 

输出是错误:未定义或outsideVar:未定义(取决于是否outsideVar是一个变量或财产对象

的外变量应该是从函数内部访问或i'm错误

编辑:?I'm使用这种结构与spookyjs,似乎有含很长的字符串对象的问题。

+2

代码片段看起来不错。你能提供更多信息吗? – Matias

+0

用'.catch()'替换''myFunc.doSomething()''后用'Promise.resolve()'和'.fail()'替换。 – greim

+0

你想'.catch'而不是'.fail'? –

回答

1

在NodeJS中,您将使用一个函数来处理错误。像这样:

myPromise.then(function() { 
    // callback, executed on successful promise resolution 
}, function() { 
    // errback, executed on rejection 
}, function() { 
    // progressback, executed if the promise has progress to report 
}); 

.fail()不是节点中的可识别函数,除非您明确定义了.fail()函数。 .fail()抛出未定义的错误。 nodejs中的.fail()用于构建单元测试,而不是承诺。 https://nodejs.org/api/assert.html

否则,正确书写,关闭应该工作。这是典型的闭包语法。请参阅Is promise a closure?了解有关闭包承诺的更多详细信息。

编辑你也可以使用.catch()而不是显式的错误函数。

+0

在NodeJS中,您肯定不会使用'$ .when' – Bergi

+0

修改特定节点语法的清晰度。 – Devnetics

+0

嗨布莱恩,对不起,我应该更加精确,我使用q,并且有一个失败函数:https://github.com/kriskowal/q – solick