javascript库中的异步承诺
我有一个在线教程中的示例,我想知道如何将每个示例转换为异步调用 编辑-基本上我希望承诺以异步方式进行每个调用,或者它是如何工作的。我不熟悉承诺,一个承诺意味着一个异步调用,或者一个承诺可以有几个异步调用,然后在最后回调 如果我有以下三个函数调用,我如何将它们链接为异步的,现在它们都按顺序立即启动 编辑2-在Joel的支持下,根据所学内容改进了我的问题,我现在有小提琴了javascript库中的异步承诺,javascript,node.js,angular-promise,Javascript,Node.js,Angular Promise,我有一个在线教程中的示例,我想知道如何将每个示例转换为异步调用 编辑-基本上我希望承诺以异步方式进行每个调用,或者它是如何工作的。我不熟悉承诺,一个承诺意味着一个异步调用,或者一个承诺可以有几个异步调用,然后在最后回调 如果我有以下三个函数调用,我如何将它们链接为异步的,现在它们都按顺序立即启动 编辑2-在Joel的支持下,根据所学内容改进了我的问题,我现在有小提琴了 也许这会给你你的期望(尽管我不确定你的期望): 你必须更具体地说明你什么时候想要完成任务。试着用文字来准确地解释你想要什么时候
也许这会给你你的期望(尽管我不确定你的期望):
你必须更具体地说明你什么时候想要完成任务。试着用文字来准确地解释你想要什么时候运行各种事情。我希望您认识到,
setTimeout()
只在将来的某个时候安排回调—下一行代码运行时不会延迟。编辑我的问题…在Javascript中,您不能将函数调用转换为异步。给定的操作可以是同步的,也可以是异步的。除了setTimeout()
之外的所有操作都是同步的。如果要使同步操作异步运行,可以将其隐藏在setTimeout()
后面,但必须为每个操作添加setTimeout()。这真的是你想做的吗?如果是这样,您希望每个操作有多大的延迟?承诺不会生成异步代码,它们用于处理现有的异步调用(如IO)。您必须记住,javascript是单线程的,所以您的代码将一下子执行,即使使用承诺也是如此。如果希望在调用之间引入任意延迟,可以在每个承诺链中调用setTimeout。上面的代码可能不是正确的示例,我对承诺不熟悉,但我希望一些异步过程按顺序异步调用,比如调用服务(异步)、获取数据、解析结果,然后插入数据库(同样是异步的),然后用最后一个回调通知,承诺可以做到吗?如果在上述情况下,当将一个异步调用的结果反馈给下一个mmclose时,Joel,这看起来像是一个,我将基本上在每个调用中放置http服务调用,然后,将返回它在末尾的样子。这里的关键点在于方法waitAndSpeak:延迟只有在方法返回后才能解决。这样它就模拟了异步调用。好的,我可以对后续的每个thenables有不同的东西,例如waitAndSpeak1,waitAndSpeak2,waitAndSpeak3,我将很快发布一个fiddler供您审阅,然后接受您的回答。感谢Joel支持我的示例,有时,由于对某些事物不熟悉,很难描述您正在寻找的内容,以及在我的环境中工作方式的一些限制,请查看此提琴,我需要您的更多帮助,希望这会使它更清晰。你现在能看看这个吗
var q = require('q');
var defer = q.defer();
defer.promise
.then(function(weapon){
setTimeout(function(){console.log('wait')}, 2000);
console.log("You can have my " + weapon);
return "bow";
})
.then(function(weapon){
console.log("and my " + weapon);
return "axe";
})
.then(function(weapon){
console.log("and my " + weapon);
});
defer.resolve("sword");
var q = require('q');
function waitAndSpeak(words) {
var defer = q.defer();
setTimeout(function(){
defer.resolve(words)
}, 2000);
return defer.promise;
}
waitAndSpeak("sword").then(function(weapon) {
console.log("You can have my " + weapon);
return waitAndSpeak("bow");
}).then(function(weapon) {
console.log("and my " + weapon);
return waitAndSpeak("axe");
}).then(function(weapon) {
console.log("and my " + weapon);
}).done();