我希望promise处理程序能够记录promise p1(而不是值"A"),因为直接console.log调用它p1.但是,它以某种方式记录"A".承诺如何在p1没有被调用的情况下自动解析为"A"?例如,console.log(p1)不按预期直接输出"A".幕后会发生什么事吗?
var p1 = new Promise(function(resolve, reject) {
resolve("A");
});
var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});Run Code Online (Sandbox Code Playgroud)
编辑:我明白,打电话
p1.then((v) => return v))
Run Code Online (Sandbox Code Playgroud)
返回一个用值v实现的新promise.除非我在这里严重遗漏了某些东西,否则第二个promise构造函数中的"p1"引用应该直接传递给console.log,从而产生块
var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});
Run Code Online (Sandbox Code Playgroud)
变得
console.log(p1).
Run Code Online (Sandbox Code Playgroud)
由于使用p1直接调用console.log,而不是p1.then(...)的结果,因此p1不应该像打印另一个程序一样解析为值"A"
var promise = new Promise(function(resolve, reject) {
resolve("B")
})
console.log(promise)
Run Code Online (Sandbox Code Playgroud)
不会产生字符串"B".
编辑2:我有一种误解,认为传递给执行程序的resolve参数是未实现函数的包装器,这引起了大量的混淆.检查为什么Promise构造函数需要一个在完成时调用'resolve'的函数,但'then'却没有 - 它返回一个值而不是?更多细节.
在我的 phoenix 项目中,我有一个通过连接表链接的帖子和标签架构
schema "posts" do
field :title, :string
field :body, :string
many_to_many :tags, App.Tag, join_through: App.PostsTags , on_replace: :delete
timestamps()
end?
Run Code Online (Sandbox Code Playgroud)
我如何确保使用 put_assoc 存在标签?
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:title, :body])
|> put_assoc(:tags, parse_tags(params), required: true)
|> validate_required([:title, :body, :tags])
end
Run Code Online (Sandbox Code Playgroud)
put_assoc 上的 required: true 和添加 :tags 来验证 required 都不像我想象的那样工作。
为什么sscanf()不能将字符串写入char*s?我初始化为NULL,因为我不想要未初始化的变量.
#include <stdio.h>
#include <string.h>
int main()
{
char* t = "I am a monkey";
char *s = NULL;
sscanf(t, "%s",s);
printf("%s\n",s);
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int x;
x=rand();
int guess;
do{
cout<<"Enter your guess:";
cin>>guess;
if(guess==x)cout<<"You got it ! ;)\n";
else {
cout<<"Wrong(";
if (guess<x) cout<<"too small)\n";
else cout<<"too big)\n";
}
} while (guess != x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题:编译并运行此程序后,我输入"999999999999"并不断重复"太大".为什么会这样?
附加信息:当我将x的值设置为常数10,并且我输入11时,我注意到它只重复"太大"一次.有什么我不知道的吗?或者代码是否有缺陷?
非常感谢 :)
这是我的代码:
def calculator(value1,value2):
function=input("Function?")
if function=="*":
return value1*value2
if function=="/":
return value1/value2
if function=="+":
return value1+value2
if function=="-":
return value1-value2
a=float(input("value 1:"))
b=float(input("value 2:"))
calculator(a,b)
print(calculator(a,b))
Run Code Online (Sandbox Code Playgroud)
Python Shell上的输出
value 1:5
value 2:5
Function?/
Function?/
1.0
Run Code Online (Sandbox Code Playgroud)
所以我只是想知道它为什么要求两次输入功能,而不是一次.这可能是一个愚蠢的问题,但感谢您的回答.