gpt4 book ai didi

javascript - Promise 链基础问题

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:35 24 4
gpt4 key购买 nike

我正在尝试理解 Promises。我创建了一些有效的 promise 链和其他无效的 promise 链。我取得了进步,但显然缺乏基本概念。例如,以下 promise 链不起作用。这是一个愚蠢的例子,但说明了问题;我正在尝试在链中两次使用 Node 的函数 randomBytes:

var Promise = require("bluebird");
var randomBytes = Promise.promisify(require("crypto").randomBytes);

randomBytes(32)
.then(function(bytes) {
if (bytes.toString('base64').charAt(0)=== 'F') {
return 64; //if starts with F we want a 64 byte random next time
} else {
return 32;
}
})
.then(randomBytes(input))
.then(function(newbytes) {console.log('newbytes: ' + newbytes.toString('base64'));})

此处出现的错误是“input is undefined”。我是否正在尝试做一些不能(或不应该)做的事情?

最佳答案

您始终需要将回调函数 传递给then()。它将根据您附加到的 promise 的结果被调用。

您当前正在立即调用 randomBytes(input),这(如果定义了 input)会传递一个 promise。您需要传递一个函数表达式,它只是获取 input 作为其参数:

.then(function(input) {
return randomBytes(input);
});

或者直接传递函数本身:

randomBytes(32)
.then(function(bytes) {
return (bytes.toString('base64').charAt(0)=== 'F') ? 64 : 32;
})
.then(randomBytes)
.then(function(newbytes) {
console.log('newbytes: ' + newbytes.toString('base64'));
});

关于javascript - Promise 链基础问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25431919/

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