作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
var screencastId = 'abc'
var a = youtube.get(screencastId);
a.then(function(screencast) {
// Yay. I have the screencast information here.
console.log(screencast);
});
// How do I access the `screencast` variable down here?
connection.beginTransactionAsync().then(function() {
return connection.queryAsync('INSERT IGNORE INTO Channels SET ?', screencast.channel);
}).then(function() {
return connection.queryAsync('INSERT INTO Screencasts SET ?', screencast);
}).then(function() {
var values = tags.map(function(tag) { return [tag]; });
return connection.queryAsync('INSERT IGNORE INTO Tags VALUES ?', [values])
}).then(function() {
var values = tags.map(function(tag) { return [screencast.screencastId, tag]; });
return connection.queryAsync('INSERT INTO ScreencastTags VALUES ?', [values])
}).then(function() {
return connection.commit();
}).error(function(e) {
connection.rollback();
winston.error(e);
});
这段代码可以分为两个独立的步骤:
screencast
的信息使用 youtube
在 YouTube 上托管模块。screencast
在数据库中。这两个步骤自然都是异步的。
我的问题是,如何访问 screencast
第二步的参数?
我找到了this comprehensive answer ,但作为一个对 JS 相对缺乏经验的人,我无法弄清楚如何在这里应用这个答案。
最佳答案
嗯,有两种方法:
screencast
(就像您已经有一个 screencastId
),该变量在所有 .then
调用之间共享.then
语句中返回一个new Promise
,其中在resolve
中传递参数screencast
所以这是我看待它的第一种方式(但不幸的是无法测试):
var screencastId = 'abc', screencast
youtube.get(screencastId)
.then(function(sc) {
screencast = sc;
})
// you need this to keep the chain
.then(function(){
return connection.beginTransactionAsync()
})
.then(function() {
return connection.queryAsync('INSERT IGNORE INTO Channels SET ?', screencast.channel);
}).then(function() {
return connection.queryAsync('INSERT INTO Screencasts SET ?', screencast);
}).then(function() {
var values = tags.map(function(tag) { return [tag]; });
return connection.queryAsync('INSERT IGNORE INTO Tags VALUES ?', [values])
}).then(function() {
var values = tags.map(function(tag) { return [screencast.screencastId, tag]; });
return connection.queryAsync('INSERT INTO ScreencastTags VALUES ?', [values])
}).then(function() {
return connection.commit();
}).error(function(e) {
connection.rollback();
winston.error(e);
});
返回新的 Promise 示例:
youtube.get(screencastId)
.then(function(sc) {
return new Promise(function(resolve,reject){
resolve(sc)
})
})
.then(function(sc){
console.log(sc)
})
关于javascript - 稍后如何访问 promise 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30073007/
我正在编写一个插件,有一个ajax调用向用户显示数据。 如果用户想在ajax成功时添加一些js?他可以从他的 js 脚本中做到这一点吗,比如定位这个 ajax 成功事件。 例如: $(documen
我有 html 代码,例如 - x 最初插入 div 'insert_calendar_eda_form'。 Javascript代码 calendar_eda_add
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我已经使用命令 sudo start myservice 启动了一个 upstart 服务。我想要一种方法,以便稍后我(或任何人)可以检查该服务是否已启动并正在运行。检查它的命令是什么? 最佳答案 找
我是一名优秀的程序员,十分优秀!