gpt4 book ai didi

javascript - 问 promise 。 .when 和 .then 的区别

转载 作者:行者123 更新时间:2023-12-02 06:58:56 27 4
gpt4 key购买 nike

虽然这段代码可以工作:

var promise = function(val) {

var _val = val;

return setTimeout(function(_val) {

var newVal = val / 10;

return {
newVal : newVal,
message : 'it just to be a ' + val
};
}, 3000);
};

Q.when(promise(400)).then(function(obj) {
return console.log('jaaaaj !', obj);
}, function() {
return console.log('no yet...');
});

JSFiddle

我的想法是:当 setTimeout 在四秒后完成它的工作时,Q 库将在第一个回调中捕获返回并显示具有两个属性的对象:newVal : 4message : 'it只是成为一个 ' + 400。相反,我在成功回调中有奇怪的 1 个数字作为 obj ...

顺便说一句,Q 库中的 .when.then 有什么区别?

最佳答案

.when() 将一个或多个 promise 作为参数。您向它传递了一个计时器句柄,因此它会立即执行 .then() 处理程序。

.when() 没有神奇的能力来辨别你传递给它的东西何时完成。您必须向它传递一个或多个 promise ,它会监控这些 promise 何时得到解决。

此外,您不能从 setTimeout() 返回任何内容,但是如果您在 setTimeout() 中解决了一个 promise ,您可以将数据传递给 .resolve() 方法。

你可以这样做:

var promise = function(val) {
var defer = Q.defer();

setTimeout(function() {

var newVal = val / 10;

defer.resolve({
newVal : newVal,
message : 'it just to be a ' + val
});
}, 3000);

// return the promise
return defer.promise;
};

Q.when(promise(400)).then(function(obj) {
return console.log('jaaaaj !', obj);
}, function() {
return console.log('rejected...');
});

但是,当您只有一个 promise 时,您甚至不需要 Q.when()。你可以这样做:

promise(400).then(function(obj) {
return console.log('jaaaaj !', obj);
}, function() {
return console.log('rejected...');
});

关于javascript - 问 promise 。 .when 和 .then 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613624/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com