我有疑问..如果我在承诺的.then()
之前定义变量,我可以在q
内找到它们,我是对的吗?回调不是这样,但它应该使用arg2
承诺。
为了确保这一点,我问下面的代码是否正确,即使在多个请求的情况下也是如此。
因此,第二个.then()
的{{1}}始终是正确的,并且它不是最后一次调用myapp()的arg2
。
function myapp()
{
var arg1=1;
var arg2=undefined; // loaded async
var arg3=undefined; // loaded async
call_promise(arg1)
.then(function(data)
{
arg2 = data;
})
.then(function()
{
arg3 = call_function(arg2);
console.log(arg3);
})
.catch(function(err){});
}
答案 0 :(得分:3)
是的,那会有效。无论调用函数多少次,都会在函数中创建新的变量。由于closure属性,传递给then
处理程序的函数仍然可以访问arg2
和arg3
。
但是,正确的方法是通过返回值来解决then
处理程序返回的promise,就像这样
function myapp() {
var arg1 = 1;
return call_promise(arg1)
.then(function(data) {
return data;
}).then(function(arg2) {
console.log(call_function(arg2));
}).catch(function(err) {});
}